|
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转新大榭论坛!
您需要 登录 才可以下载或查看,没有账号?注册
x
大数据时代下,数据采集推动着数据分析,数据分析推动发展。但是在这个过程中会出现很多问题。拿最简单最基础的爬虫采集数据为例,过程中就会面临,IP被封,爬取受限、违法操作等多种问题,所以在爬去数据之前,一定要了解好预爬网站是否涉及违法操作,找到合适的代理IP访问网站等一系列问题。* ?: L" e4 u& H; t' U" h8 ?
下面分享一些爬取微博数据时,防太阳HTTP止爬虫被墙的几个技巧,希望对您有所帮助。
- d- D* b' H5 g- n0 E g& p, I9 A4 y( B: K
技巧一:分布式爬取, ]% W5 D; F; e% {% ~% G; O
分布式爬取的也有很多Githubrepo。原理主要是维护一个所有集群机器能够有效分享的分布式队列。?
) V4 a6 y4 T3 `7 R& ]使用分布式爬取还有另外一个目的:大规模抓取,单台机器的负荷很大,况且速度很慢,多台机器可以设置一个master管理多台slave去同时爬取。?
6 z3 g2 e4 @, P另外关于网页判重问题,可以用Bloom Filter。
" I" V& l7 @* s d7 S; C- X5 s7 Q2 m. h! |+ `' c6 }( \6 y
2 E6 p) D8 e& u" D- A6 S# m; d
技巧二:设置cookies( }" X& u2 K# j; W
cookie其实是储存在用户终端的一些被加密的数据,有些网站通过cookies来识别用户身份,如果某个访问总是高频率地发请求,很可能会被网站注意到,被嫌疑为爬虫,这时网站就可以通过cookie找到这个访问的用户而拒绝其访问。?) p" d/ ~5 m& u" P5 P
可以自定义设置cookie策略(防止cookie rejected问题:拒绝写入cookie)或者禁止cookies。?% Y: e A( X! |/ Q
(1) 自定义设置cookies策略(防止cookierejected问题,拒绝写入cookie)?/ |8 I) b9 {3 k P: a
在系列一那篇文章里就有自定义cookie策略设置,但更多的借鉴是官方文档的例子,设置方法其实都大同小异,因为HttpClient-4.3.1组件版本跟以前旧版本的不同,写法也有不同,另见官方文档:?, N$ i1 E$ o% z* M, a" q
(2) 禁止cookies?: I0 k! A7 z2 z* l1 g5 ^
通过禁止cookie,这是客户端主动阻止服务器写入。禁止cookie可以防止可能使用cookies识别爬虫的网站来ban掉我们。?; a4 b8 h$ j D( v* ^
在scrapy爬虫中可以设置COOKIES_ENABLES= FALSE,即不启用cookies middleware,不向web server发送cookies。
3 K( m3 Z$ {4 b7 X" n- {- _
* e! \. y( }0 j ?' G) r
6 q% f' a' m( ?2 s; R" ]技巧三:修改IP/ m* a3 |" d4 e2 Y! J0 f
其实微博识别的是IP,不是账号。也就是说,当需要连续抓取很多数据的时候,模拟登录没有意义。只要是同一个IP,不管怎么换账号也没有用,主要的是换IP。?$ h1 w/ x8 F( Z: P8 [" |& b/ b' q
web server应对爬虫的策略之一就是直接将IP或者整个IP段都封掉禁止访问,当IP被禁封后,转换到其他IP继续访问即可。方法:代理IP、本地IP数据库(使用IP池)。?
( p* c& v) D# u" ^/ I7 Z(1) 从代理IP网站获取大量IP?
* j. ~+ b; x5 {8 d如果总是请求代理IP站点也未免有些麻烦,况且某些代理IP站点有时还可能被禁封,当然再换一个代理IP站点也可以,如果你不嫌麻烦的话。?
0 ` t5 @, Z4 R* g! d' v* N" d! A% ^(2) 使用IP地址库?
* W5 a: g& |1 y" ~# O) O- W4 h网上也有很多现成可用的IP地址库,可以存放到本地,如果本地有IP数据库就方便很多,至少不用每次都去请求代理IP站点了(当然可以一次性把站点内所有代理IP先爬下来存储好,形成本地IP数据库),总之获取IP的方法有很多,不一定非要是通过代理IP站点。 O, S: `+ p4 n7 |6 S' K
道理相同,把IP解析出来就可以用了。
* a% o( q/ H4 K w5 I8 |, y1 ^# y1 v. s" g/ j, @3 }
# N1 c5 v) x" H
技巧四:修改User-Agent
/ S7 n) Z! [+ `5 B5 t! {- Y. d6 X3 x最常见的就是伪装浏览器,修改User-Agent(用户代理)。?
" N3 l3 P9 y0 F& vUser-Agent是指包含浏览器信息、操作系统信息等的一个字符串,也称之为一种特殊的网络协议。服务器通过它判断当前访问对象是浏览器、邮件客户端还是网络爬虫。在request.headers里可以查看user-agent,关于怎么分析数据包、查看其User-Agent等信息,这个在前面的文章里提到过。?. M8 {7 R7 D' u& e: ]1 H; m/ T
具体方法可以把User-Agent的值改为浏览器的方式,甚至可以设置一个User-Agent池(list,数组,字典都可以),存放多个“浏览器”,每次爬取的时候随机取一个来设置request的User-Agent,这样User-Agent会一直在变化,防止被墙。% n% R! h* \$ O0 `) |
% p# x/ ^9 Z0 U' \' p, H0 Y# M
+ X- g+ v0 y) S; n# q技巧五:设置下载等待时间/下载频率
) _* j8 q7 R# e, i$ P, M大规模集中访问对服务器的影响较大,爬虫可以短时间增大服务器负载。这里需要注意的是:设定下载等待时间的范围控制,等待时间过长,不能满足短时间大规模抓取的要求,等待时间过短则很有可能被拒绝访问。?
+ e ~ B( I; G(1) 在之前“从url获取HTML”的方法里,对于httpGet的配置设置了socket超时和连接connect超时,其实这里的时长不是绝对的,主要取决于目标网站对爬虫的控制。?( }4 ~) V2 ~" _; x V
(2) 另外,在scrapy爬虫框架里,专有参数可以设置下载等待时间download_delay,这个参数可以设置在setting.py里,也可以设置在spider里。+ Q- x0 @2 @' L
y9 l) Y8 r; a Y
* x$ C7 U7 v/ l5 k% h1 {; m. u3 S( M
太阳HTTP海量IP,高效快速,给您更好的爬虫操作体验! |
|