QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 1687|回复: 0
打印 上一主题 下一主题

python 爬虫 流程介绍

[复制链接]
字体大小: 正常 放大

1171

主题

4

听众

2781

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-22 09:47 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
网络爬虫是一种自动化获取网页信息的程序,通常用于数据采集、信息监控等领域。Python 是一种广泛应用于网络爬虫开发的编程语言,具有丰富的库和框架来简化爬虫的编写和执行过程。本文将介绍如何使用 Python 编写网络爬虫,包括基本原理、常用库和实战案例。
2 @# |! j9 a: f& R2 H1 ?9 H" K; R3 ^3 s0 R# `/ @3 J
一、原理介绍: n' Z# F# [) b. A1 A, j& I6 a
网络爬虫是一种自动化程序,通过模拟浏览器的行为向网络服务器发送 HTTP 请求,获取网页内容并进一步提取所需信息的过程。网络爬虫主要用于数据采集、信息监控、搜索引擎等领域,为用户提供更便捷、全面的数据检索服务。
3 P- Q' f; O( x8 @3 e! D7 [7 H
2 Y5 j/ N1 j3 M; _0 [& {1.1 发送 HTTP 请求9 x6 T8 p8 {2 H" v9 Y3 J
在网络爬虫的工作流程中,首先需要发送 HTTP 请求获取网页内容。这个过程类似于用户在浏览器中输入网址并按下回车的操作。通过发送请求,服务器会返回相应的 HTML 内容,其中包含了网页的结构和信息。: S$ v1 G; e0 n( }% K/ c. {2 Q' P
5 l! h/ [4 g* ?, @) H+ y  _
1.2 解析网页内容: T$ S% M( l* d1 ^' u
获取到网页内容后,网络爬虫需要解析 HTML 或其他标记语言,以便从中提取所需的信息。常用的解析库包括 Beautiful Soup、lxml 等,它们提供了方便的方法来遍历、搜索和操作 HTML 标签,从而提取文本、链接、图片等内容。0 R; a: s' f( i# {, Q/ }
/ n; E) P0 Z& `+ O: k, W
1.3 常用爬虫框架6 x4 b8 z+ T' V) F" m6 Y& @
requests:是一个简洁、易用的 HTTP 请求库,可以方便地发送 HTTP 请求并获取响应内容。
3 t/ `5 J5 y4 v9 }$ oBeautiful Soup:是一个功能强大的解析库,可以帮助解析 HTML、XML 等标记语言,提供了方便的方法选择和提取数据。
( Q5 U& }1 E, f- j( y$ M! _Scrapy:是一个功能完善的网络爬虫框架,提供了高度可定制的爬虫流程、自动化处理和数据存储功能,适用于大规模爬取和数据处理。
: G) O4 `* |$ _; m$ L" L1.4 工作原理总结' |5 f1 ~& Y) ~- i1 m7 G
网络爬虫的基本工作原理可以总结为以下几个步骤:
2 B4 ~& m1 ]( L. e  \0 O1 B9 H1 d/ E/ O! w$ E# P- T
发送 HTTP 请求:模拟浏览器向目标网站发送请求,获取网页内容。, U' P9 r  N; G( [
解析网页内容:使用解析库解析 HTML 或其他标记语言,提取所需信息。
# o& [+ ?0 B) ^2 r7 J) {处理信息:对提取的信息进行处理、存储或进一步分析。- t* R& l# m. V$ h/ l( Y
循环操作:根据需求循环执行上述步骤,实现自动化的数据采集和处理。1 p0 L! r6 q' q8 o( _& x$ `; t+ I4 E
网络爬虫的设计和实现需要根据具体需求选择合适的库和框架,并理解 HTTP 协议、HTML 结构等基础知识。通过不断学习和实践,可以编写高效、稳定的网络爬虫程序,为数据分析和应用开发提供有力支持。% ?$ Y; \) S! L- v+ E" V

5 q+ e1 n! @- y8 `3 P3 M4 o二、使用 requests 库发起 HTTP 请求
1 H$ ?9 E2 d+ q1 @在网络爬虫开发中,使用 requests 库可以方便地向目标网站发送 HTTP 请求,并获取服务器返回的响应内容。下面将详细展开说明如何使用 requests 库发起 HTTP 请求并处理响应。7 |% U, b8 p. x6 h

) `5 v5 T6 S# e2 P* M+ O2.1 导入 requests 库
$ `1 X/ g2 T# D4 L3 u, z9 d首先需要确保已经安装了 requests 库,如果没有安装,可以使用 pip 进行安装:9 q) m2 P5 m* v3 S6 J5 b# b% f

- Q9 ~5 a0 q# |; ~5 n& Spip install requests
6 F  b: B; P; r6 P* n% m: z, \2 k3 t; W4 g1 u, ^
然后在 Python 脚本中导入 requests 库:+ ^. T! ]: C% m& L

% K6 T5 p' [! T* g2 O$ h3 rimport requests
* t2 F, X# A/ A. I
3 ^% l, d$ M) |/ k8 S& p+ Q2.2 发起 GET 请求
, D  o6 `$ r5 v& l0 j4 J通过 requests.get(url) 方法可以发起一个 GET 请求,并获取服务器返回的响应对象。示例代码如下:
& M( A/ ?) R# e8 m8 e- F" l( g4 o% z* S1 r: L4 p, H4 H9 D5 N5 }; `
url = 'https://www.example.com'
' F5 d* o3 r8 I7 ?8 Y( Kresponse = requests.get(url)
. O3 w5 \3 |- L2 ]" A1 d
1 P! \: R; n+ l3 {. J1 n& F) i在这段代码中,我们向 https://www.example.com 发送了一个 GET 请求,并将服务器返回的响应对象存储在 response 变量中。
: n4 e0 F' V9 G& u. G% B) y* O& P, R3 n* |9 z$ b; j( R
2.3 处理响应对象/ A2 |0 f! e( c
一旦获取了响应对象,我们可以通过不同的属性和方法来访问和处理响应内容。最常用的是 response.text 属性,它返回的是响应内容的文本形式。我们可以通过打印来查看网页的内容:+ b4 ~/ y/ p  ~9 |" F# J
0 z1 e0 Q% P5 S! z- s/ J6 i
print(response.text), F- l, ], P. b$ @
& `; L* s, m# M' m4 b& b( A
这样就可以在控制台上看到从网页获取到的 HTML 内容,包括文本、标签、链接等信息。
* ]2 D/ g" C$ I7 J; }2 @, J' e% h2 [5 |
2.4 响应对象的其他属性和方法
7 ?6 [  B6 V, [5 a  X0 G除了 response.text 外,响应对象还包含其他有用的属性和方法,比如:
1 U  \" r6 \0 m9 h
# p  X4 Y& M( o' a0 c8 Q4 d9 lresponse.status_code:返回响应的状态码,200 表示请求成功,404 表示页面未找到等。
4 w. p. w8 R: L# q0 Q' P2 W6 Dresponse.headers:返回响应头信息,包含了服务器返回的 HTTP 头部信息。/ g3 Z' m/ z6 n; @
response.json():如果响应内容是 JSON 格式,可以使用该方法将其转换为 Python 对象。
% B1 H7 j! i2 U; B6 t通过有效地使用 requests 库,我们可以轻松地完成向网站发送请求并获取响应内容的操作,为网络爬虫的开发提供了便利。同时,合理处理响应内容,能够更好地提取和利用网页中的信息,实现数据的采集和分析。; O; }5 |% j: [5 g/ M
2 c* W- m6 ]' j3 v' v2 |
三、使用 Beautiful Soup 解析网页内容- J% T0 c1 N7 O5 @/ K
在网络爬虫开发中,Beautiful Soup 是一个流行的 Python 库,用于解析 HTML 或其他标记语言,并提供了方便的方法来选择和提取网页中的信息。下面将详细展开说明如何使用 Beautiful Soup 解析网页内容。
- X* E6 y# T3 n. _+ d/ S- X$ ^5 Z4 ^, u
3.1 导入 Beautiful Soup 库
; P, L2 [! B1 Q2 N2 P首先需要确保已经安装了 Beautiful Soup 库,如果没有安装,可以使用 pip 进行安装:# Y8 _$ @7 d; K0 g( w$ G8 e

' ^- i/ |+ K' Q; W% D: v  e$ Y$ d$ kpip install beautifulsoup4) v, W" z3 ]+ t
# _# y4 m- t1 d3 u4 ~1 q! b
然后在 Python 脚本中导入 Beautiful Soup 库:. h4 S7 F$ O& X( }* A3 l% C9 o
: M) W' d3 }% g" t9 d7 t& c( g
from bs4 import BeautifulSoup# q" L) e0 u1 M3 }/ S$ J9 d: a) J
2 h) o7 \8 |) n& @1 X
3.2 使用 Beautiful Soup 解析 HTML 内容1 o. |! b" A$ {7 d
在这段示例代码中,我们将之前通过 requests 库获取到的网页内容 response.text 存储在 html_content 变量中。然后使用 Beautiful Soup 解析这段 HTML 内容,并创建一个 BeautifulSoup 对象:
7 @/ |* Y% [3 i! T
) @' F) G  [$ N* a. K9 Ahtml_content = response.text8 d6 i7 i" B5 j4 m
soup = BeautifulSoup(html_content, 'html.parser')
  P% G% B0 c( u# U" k7 r2 o; t" Q& G
在上面的代码中,我们使用了 html.parser 解析器来解析 HTML 内容,创建了一个 BeautifulSoup 对象 soup,可以通过它来操作和提取网页内容。
6 v0 w- b' i0 ^/ M  K; p: G* B9 c( _/ A& k* n
3.3 通过选择器提取信息
; i( [2 H4 G+ i* ]' q: ^( Z8 m5 MBeautiful Soup 提供了一种类似于 CSS 选择器的语法,可以方便地选择和提取特定的标签或内容。在下面的示例中,我们使用 soup.select('h2.title') 选择器来提取所有 <h2> 标签且 class 为 title 的内容,并将提取出的标题打印出来:
" w5 v1 g: G1 n7 \
) V4 V) X& \3 z; Ztitles = soup.select('h2.title')
/ I$ _% p, E% o' e! e  }& ]; Ofor title in titles:/ ^) g* L5 x/ l. d
    print(title.text)  s$ N* y) J( X: M1 u
6 Y3 @8 N: J' F& t' \9 B% @. g
通过这种方式,我们可以针对具体的 HTML 结构,利用选择器提取出所需的信息,比如标题、链接、图片等内容,从而实现对网页内容的精确提取和处理。& P9 F  L! Z; A7 t! v, @

( U) R7 e4 }2 n! b! I5 n使用 Beautiful Soup 的强大解析功能,配合合适的选择器,能够帮助我们高效地从网页中提取所需信息,为数据分析、信息抓取等任务提供有力的支持。通过不断练习和应用,可以熟练运用 Beautiful Soup 解析网页内容,提高网络爬虫开发的效率和准确性。
. D7 {* S. s8 Z; S+ h' `1 o1 q# L) B; s2 G$ v5 d
四、实战案例:爬取网页标题和链接
0 K" s+ B/ i* i+ W( A在这个实战案例中,我们将结合使用 requests 库和 Beautiful Soup 来爬取网页中的标题和链接信息。通过解析网页内容,我们可以提取出页面中所有的链接以及链接对应的文本内容,从而构建一个简单的网页内容爬取程序。0 C0 I& {; i  ~. x  u/ e

6 Q' I2 @8 Y! N4.1 发起 HTTP 请求并解析网页内容7 _9 h/ P" z$ p- i5 I2 S' {
首先,我们使用 requests 库发起一个 GET 请求,获取目标网页的内容,并将其存储在 response 变量中。然后,我们使用 Beautiful Soup 对响应内容进行解析,创建一个 BeautifulSoup 对象 soup:
. l) Z0 k% t: q  ^$ s3 {& h8 Q
2 p( G) H- C1 D$ H0 \import requests
% r) Q  M9 M9 \6 _1 tfrom bs4 import BeautifulSoup
/ p0 t- Z$ l' Y
) ^+ p; U% A9 A* J7 k' Turl = 'https://www.example.com'
- X" C  g! f: A& T) ~2 M# E' ]7 E9 Wresponse = requests.get(url), ?+ t& S5 e5 P$ [, A+ s+ o: |% [
soup = BeautifulSoup(response.text, 'html.parser')! F, b1 \' |2 @3 n3 L- {
8 T6 E; W+ W; }8 l' v/ M9 g: a; n
现在,我们已经成功获取了页面内容并用 Beautiful Soup 解析了 HTML 结构。# D! r' ^! d+ h2 b' Y

) v! x/ {- _3 A2 ^1 |0 Q4.2 提取标题和链接信息8 F, R4 B  _% A/ R. h
接下来,我们通过 soup.find_all('a') 方法找到网页中所有的 <a> 标签,表示链接。然后遍历这些链接,分别获取链接的 href 属性和文本内容,并将其打印出来:
. n2 a6 O; I" @- o( }% I, n( `3 u$ h2 x5 H8 P3 H
for link in soup.find_all('a'):
% C2 j3 z6 U, t/ w2 T    print(link.get('href'), link.text)  \: d+ ~6 S5 m! [

" v* S) A4 ~! y' @! `通过这段代码,我们可以逐个输出每个链接的 URL 和链接文本内容,从而实现对网页中链接的抓取和处理。; j7 a) k8 J" m1 x/ M$ y! R

3 a, d1 R6 c, R- Y  Q1 |* p2 Y% r4.3 结合实际需求扩展功能4 B% u( w/ t3 f; }1 D
在实际应用中,我们可以根据需要扩展这个爬取程序,比如筛选特定条件下的链接、保存链接信息到文件、进一步深入爬取链接指向的页面内容等。通过不断完善和扩展功能,可以实现更加强大和灵活的网络爬虫程序,用于各种数据采集和分析任务。$ F- P  o- j! c

% M: p9 a5 M, g& E8 {8 H5 Z通过这个实战案例,我们可以更直观地了解如何结合使用 requests 库和 Beautiful Soup 进行网页内容的爬取和处理,为进一步开发复杂的网络爬虫程序提供了基础和参考。
2 n. I1 H$ V) ?7 {7 G3 o1 `" }4 v+ Y3 B  G$ x. s9 |6 E' [7 m3 R
五、高级应用:设置代理 IP
- w; [5 k* s3 t9 \- _在网络爬虫开发中,有时需要使用代理 IP 来隐藏真实 IP 地址、绕过访问限制或实现其他特定需求。在 Python 中,可以通过设置代理 IP 来发送 HTTP 请求,让请求经过代理服务器转发到目标网站,从而实现匿名访问和反爬虫措施。
& ^  l% U( u$ {1 L. u( i/ n' M$ t- `0 M
5.1 设置代理 IP
9 f* l$ @" _- G在上面的示例代码中,我们定义了一个代理 IP 字典 proxies,其中包括了 HTTP 和 HTTPS 协议的代理 IP 地址及端口号。通过将这个代理 IP 字典传递给 requests.get() 方法的 proxies 参数,可以让请求通过指定的代理 IP 发送出去:* w* r3 I; ?* G
  A7 Y$ m) r: t
proxies = {1 ~- a6 s3 ]4 g5 g( J3 \5 b9 H5 r% l
    'http': 'http://your_proxy_ip:port',
: V' {! v( [0 k4 p    'https': 'https://your_proxy_ip:port'
: h( m5 j8 B1 I}
6 {6 D7 {, O0 d; V8 D6 e' e- f; v; b& s* f! J
response = requests.get('https://www.example.com', proxies=proxies)
2 m) K0 U) f9 {& b- T2 x: t: o. w2 O" l: A5 {0 D* ^; [
这样设置代理 IP 后,网络请求将会经过代理服务器转发出去,目标网站会认为请求来自于代理 IP 而不是真实 IP 地址。: p8 S. a- i# r# @9 S9 B/ s8 O8 @
% N( |9 \! d: C$ ~4 c
5.2 代理 IP 的选择和使用2 @" y4 V* U* E
在实际使用代理 IP 时,需要注意以下几点:
/ I' }! W8 D/ I9 Y) y0 K  x9 ?$ F( T( |
选择可靠的代理 IP 服务提供商:确保代理 IP 的稳定性和可用性,避免使用被封禁或不稳定的代理 IP。! T: y) G; Y+ z4 V6 N8 A9 I( K
注意代理 IP 的隐私性:避免使用免费公开的代理 IP,因为这些代理 IP 很可能被滥用或监控,存在隐私泄露的风险。
2 y: _1 n- `, Z定期检测代理 IP 的可用性:代理 IP 可能会失效或被封锁,需要定期检测代理 IP 的可用性并及时更换。
" y: A& N0 f7 ?$ l2 e$ g通过合理选择和使用代理 IP,可以有效提高网络爬虫的反反爬虫能力,避免被目标网站封禁 IP 或限制访问,从而顺利完成数据采集任务。+ ?0 Y! t3 C3 [

1 m) C& l* Y+ u/ ?9 `* Q
  t9 y' ~: e( U1 x4 N/ E/ N; @& V4 O& |0 C6 k
zan
转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
您需要登录后才可以回帖 登录 | 注册地址

qq
收缩
  • 电话咨询

  • 04714969085
fastpost

关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

手机版|Archiver| |繁體中文 手机客户端  

蒙公网安备 15010502000194号

Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

GMT+8, 2025-6-24 09:17 , Processed in 1.537693 second(s), 50 queries .

回顶部