标签:random 代理服务器 cookies close false 速度 spider ref event
爬虫的本质就是“抓取”第二方网站中有价值的数据,因此,每个网站都会或多或少地采用一些反爬虫技术来防范爬虫。比如前面介绍的通过 User-Agent 请求头验证是否为浏览器、使用 JavaScript 动态加载资源等,这些都是常规的反爬虫手段。
下面针对更强的反爬虫技术提供一些解决方案。
有些网站会使用 IP 地址验证进行反爬虫处理,程序会检查客户端的 IP 地址,如果发现同一个 IP 地址的客户端频繁地请求数据, 该网站就会判断该客户端是爬虫程序。
针对这种情况,我们可以让 Scrapy 不断地随机更换代理服务器的 IP 地址,这样就可以欺骗目标网站了。
为了让 Scrapy 能随机更换代理服务器,可以自定义一个下载中间件,让该下载中间件随机更换代理服务器即可。
Scrapy 随机更换代理服务器只要两步:
class RandomProxyMiddleware (object) : #动态设置代理服务器的IP 地址 def process request (self, request, spider): # get_random_proxy() 函数随机返回代理服务器的IP 地址和端口 request.meta["proxy"] = get_random_proxy()
#配置自定义的下载中间件 DOWNLOADER MIDDLEWARES = { ‘ZhipinSpider.middlewares.RandomProxyMiddleware‘: 543, }
有些网站可以通过跟踪 Cookie 来识别是否是同一个客户端。Scrapy 默认开启了 Cookie,这样目标网站就可以根据 Cookie 来识别爬虫程序是同一个客户端。
目标网站可以判断,如果同一个客户端在单位时间内的请求过于频繁,则基本可以断定这个客户端不是正常用户,很有可能是程序操作(比如爬虫),此时目标网站就可以禁用该客户端的访问。
针对这种情况,可以让 Scrapy 禁用 Cookie(Scrapy 不需要登录时才可禁用 Cookie)。在 settings.py 文件中取消如下代码的注释即可禁用 Cookie:
COOKIES_ENABLED = False
在很多 Web 站点目录下都会提供一个 robots.txt 文件,在该文件中制定了一系列爬虫规则。例如,Weibo.com 网站下的 robots.txt 文件的内容如下:
Sitemap: http://weibo.com/sitemap.xml User-Agent: Baiduspider Disallow : User-agent : 360Spider Disallow : User-agent : Googlebot Disallow : User-agent : Sogou web spider Disallow : User-agent:bingbot Disallow : User-agent : smspider Disallow : User-ageηt : HaosouSpider Disallow : User-agent : YisouSpider Disallow : User-agent : * Disallow : /
该规则文件指定该站点只接受 Baidu 的网络爬虫,不接受其他爬虫程序。
为了让爬虫程序违反爬虫规则文件的限制,强行爬取站点信息,可以在 settings 文件中取消如下代码的注释来违反站点制定的爬虫规则:
#指定不遵守爬虫规则 ROBOTSTXT OBEY = False
正如前面所提到的,当同一个 IP 地址、同一个客户端访问目标网站过于频繁时(正常用户的访问速度没那么快),其很可能会被当成机器程序(比如爬虫)禁止访问。
为了更好地模拟正常用户的访问速度,可以限制 Scrapy 的访问频率。在 settings 文件中取消如下代码的注释即可限制 Scrapy 的访问频率:
#开启访问频率限制 AUTOTHROTTLE ENABLED = True #设置访问开始的延迟 AUTOTHROTTLE START DELAY = 5 #设置访问之间的最大延迟 AUTOTHROTTLE MAX DELAY = 60 #设置Scrapy 并行发给每台远程服务器的请求数量 AUTOTHROTTLE TARGET CONCURRENCY= 1.0 #设置下裁之后的自动延迟 DOWNLOAD DELAY = 3
有些网站为了防止机器程序访问,会做一些很“变态”的设计,它会记录同一个客户端、同一个IP地址的访问次数,只要达到一定的访问次数(不管你是正常用户,还是机器程序),目标网站就会弹出一个图形验证码让你输入,只有成功输入了图形验证码才能继续访问。
为了让机器识别这些图形验证码,通常有两种解决方式:
Python Scrapy反爬虫常见解决方案(包含5种方法)
标签:random 代理服务器 cookies close false 速度 spider ref event
原文地址:https://www.cnblogs.com/jackzz/p/10726892.html