转载自这里
1. 设置download_delay
他的作用主要是设置下载的等待时间,大规模集中的访问对服务器的影响最大,相当于短时间中增大服务器负载。下载等待时间长,不能满足短时间大规模抓取的要求,太短则大大增加了被ban的几率。如果你的爬虫工作的好好的,突然掉线了,并且得到了类似下面的错误:
|
|
不妨试着将download_delay
设置的大一点。
使用注意:
download_delay
可以设置在settings.py中,也可以在spider中设置
2. 禁止cookies
所谓cookies,是指某些网站为了辨别用户身份而储存在用户本地终端(Client Side)上的数据(通常经过加密),禁止cookies也就防止了可能使用cookies识别爬虫轨迹的网站得逞。
使用:
在settings.py中设置COOKIES_ENABLES=False。也就是不启用cookies middleware,不向web server发送cookies
3. 使用user agent池
所谓的user agent,是指包含浏览器信息、操作系统信息等的一个字符串,也称之为一种特殊的网络协议。服务器通过它判断当前访问对象是浏览器、邮件客户端还是网络爬虫。在request.headers可以查看user agent。如下,使用scrapy shell查看:
scrapy shell http://michaelyou.github.io
输出request.headers可以得到如下信息
|
|
由此得到,scrapy本身是使用Scrapy/0.24.4来表明自己身份的。这也就暴露了自己是爬虫的信息。解决方法如下:
首先编写自己的UserAgentMiddle中间件,在spider目录下新建rotate_useragent.py,代码如下:
|
|
建立user agent池(user_agent_list)并在每次发送request之前从agent池中随机选取一项设置request的User_Agent。编写的UserAgent中间件的基类为UserAgentMiddle。
除此之外,要在settings.py(配置文件)中禁用默认的useragent并启用重新实现的User Agent。配置方法如下:
取消默认的useragent,使用新的useragent
|
|
4. 使用IP池
web server应对爬虫的策略之一就是直接将你的IP或者是整个IP段都封掉禁止访问,这时候,当IP封掉后,转换到其他的IP继续访问即可。
可以使用Scrapy+Tor+polipo
配置方法与使用教程请点这里。
5. 分布式爬取
有时间再补充