标签 - Scrapy

Python Scrapy    2022-11-25 15:18:14    0    0    0

爬虫的本质就是“抓取”第二方网站中有价值的数据,因此,每个网站都会或多或少地采用一些反爬虫技术来防范爬虫。比如前面介绍的通过 User-Agent 请求头验证是否为浏览器、使用 JavaScript 动态加载资源等,这些都是常规的反爬虫手段。

下面针对更强的反爬虫技术提供一些解决方案。

IP 地址验证

有些网站会使用 IP 地址验证进行反爬虫处理,程序会检查客户端的 IP 地址,如果发现同一个 IP 地址的客户端频繁地请求数据, 该网站就会判断该客户端是爬虫程序。

针对这种情况,我们可以让 Scrapy 不断地随机更换代理服务器的 IP 地址,这样就可以欺骗目标网站了。

为了让 Scrapy 能随机更换代理服务器,可以自定义一个下载中间件,让该下载中间件随机更换代理服务器即可。

Scrapy 随机更换代理服务器只要两步:

打开 Scrapy 项目下的 middlewares.py 文件,在该文件中增加定义如下类:

  1. class RandomProxyMiddleware (object) :
  2. #动态设置代理服务器的IP 地址
  3. def process request (self, request, spider):
  4. # get_random_proxy() 函数随机返回代理服务器的IP 地址和端口
  5. request.meta["proxy"] = get_random_proxy()
  1. 上面程序通过自定义的下载中间件为 Scrapy 设置了代理服务器。程序中的 get_random_proxy() 函数需要能随机返回代理服务器的 IP 地址和端口,这就需要开发者事先准备好一系列代理服务器,该函数能随机从这些代理服务器中选择一个。
  2. 通过 settings.py 文件设置启用自定义的下载中间件。在 settings.py 文件中增加如下配置代码:
  1. #配置自定义的下载中间件
  2. DOWNLOADER MIDDLEWARES = {
  3. 'ZhipinSpider.middlewares.RandomProxyMiddleware': 543,
  4. }

禁用Cookie

有些网站可以通过跟踪 Cooki