pythonscrapy反爬虫常见解决方案(包含5种方法)(代码片段)

author author     2022-11-29     332

关键词:

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

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

IP 地址验证

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

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

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

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

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

        

      禁用Cookie

      有些网站可以通过跟踪 Cookie 来识别是否是同一个客户端。Scrapy 默认开启了 Cookie,这样目标网站就可以根据 Cookie 来识别爬虫程序是同一个客户端。

      目标网站可以判断,如果同一个客户端在单位时间内的请求过于频繁,则基本可以断定这个客户端不是正常用户,很有可能是程序操作(比如爬虫),此时目标网站就可以禁用该客户端的访问。

      针对这种情况,可以让 Scrapy 禁用 Cookie(Scrapy 不需要登录时才可禁用 Cookie)。在 settings.py 文件中取消如下代码的注释即可禁用 Cookie:

    6. COOKIES_ENABLED = False
      

        

      违反爬虫规则文件

      在很多 Web 站点目录下都会提供一个 robots.txt 文件,在该文件中制定了一系列爬虫规则。例如,Weibo.com 网站下的 robots.txt 文件的内容如下:

    7. 技术图片
      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 : /
      View Code

      该规则文件指定该站点只接受 Baidu 的网络爬虫,不接受其他爬虫程序。

      为了让爬虫程序违反爬虫规则文件的限制,强行爬取站点信息,可以在 settings 文件中取消如下代码的注释来违反站点制定的爬虫规则:

    8. #指定不遵守爬虫规则
      ROBOTSTXT OBEY = False
      

        

      限制访问频率

      正如前面所提到的,当同一个 IP 地址、同一个客户端访问目标网站过于频繁时(正常用户的访问速度没那么快),其很可能会被当成机器程序(比如爬虫)禁止访问。

      为了更好地模拟正常用户的访问速度,可以限制 Scrapy 的访问频率。在 settings 文件中取消如下代码的注释即可限制 Scrapy 的访问频率:

    9. #开启访问频率限制
      AUTOTHROTTLE ENABLED = True
      #设置访问开始的延迟
      AUTOTHROTTLE START DELAY = 5
      #设置访问之间的最大延迟
      AUTOTHROTTLE MAX DELAY = 60
      #设置Scrapy 并行发给每台远程服务器的请求数量
      AUTOTHROTTLE TARGET CONCURRENCY= 1.0
      #设置下裁之后的自动延迟
      DOWNLOAD DELAY = 3
      

        

      图形验证码

      有些网站为了防止机器程序访问,会做一些很“变态”的设计,它会记录同一个客户端、同一个IP地址的访问次数,只要达到一定的访问次数(不管你是正常用户,还是机器程序),目标网站就会弹出一个图形验证码让你输入,只有成功输入了图形验证码才能继续访问。

      为了让机器识别这些图形验证码,通常有两种解决方式:

        1. 使用 PIL、Libsvrn 等库自己开发程序来识别图形验证码。这种方式具有最大的灵活性,只是需要开发人员自己编码实现。
        2. 通过第三方打码平台识别。有不少图形验证码的在线识别网站,它们的识别率基本可以做到 90% 以上。但是识别率高的在线识别网站通常都要收费,而免费的往往识别率不高,还不如自己写程序来识别。

常见的反爬虫和应对方法

0x01常见的反爬虫  这几天在爬一个网站,网站做了很多反爬虫工作,爬起来有些艰难,花了一些时间才绕过反爬虫。在这里把我写爬虫以来遇到的各种反爬虫策略和应对的方法总结一下。  从功能上来讲,爬虫一般分为数... 查看详情

pythonscrapy实现网页爬虫(代码片段)

Pythonscrapy安装和网页爬虫功能实现现在组内有个工作就是维护恶意URL库,然后这个维护工作,主要是通过从几个会发布恶意URL地址的网站获取恶意网址,每次都得花费半天,很乏味的事情。所以就想到能否用个爬... 查看详情

常见的反爬虫和应对方法

0x01常见的反爬虫这几天在爬一个网站,网站做了很多反爬虫工作,爬起来有些艰难,花了一些时间才绕过反爬虫。在这里把我写爬虫以来遇到的各种反爬虫策略和应对的方法总结一下。从功能上来讲,爬虫一般分为数据采集,... 查看详情

常见的反爬虫和应对方法

0x01常见的反爬虫这几天在爬一个网站,网站做了很多反爬虫工作,爬起来有些艰难,花了一些时间才绕过反爬虫。在这里把我写爬虫以来遇到的各种反爬虫策略和应对的方法总结一下。从功能上来讲,爬虫一般分为数据采集,... 查看详情

pythonscrapy简单的爬虫

1scrapy的文档比较简单 http://scrapy-chs.readthedocs.io/zh_CN/latest/intro/overview.html我假定你已经安装了Scrapy。假如你没有安装,你可以参考这篇文章。在本文中,我们将学会如何使用Scrapy建立一个爬虫程序,并爬取指定网站上的内容1.创... 查看详情

常见的一些反爬虫策略(下篇)-java网络爬虫系统性学习与实战系列(10)

常见的一些反爬虫策略(下篇)-Java网络爬虫系统性学习与实战系列(10)文章目录联系方式反爬虫策略文本混淆SVG映射CSS文字偏移图片混淆伪装字体反爬Referer字段反爬数据分段加载权限控制反爬加密反爬总结系列文章地址:Java网... 查看详情

常见的一些反爬虫策略(下篇)-java网络爬虫系统性学习与实战系列(10)

常见的一些反爬虫策略(下篇)-Java网络爬虫系统性学习与实战系列(10)文章目录联系方式反爬虫策略文本混淆SVG映射CSS文字偏移图片混淆伪装字体反爬Referer字段反爬数据分段加载权限控制反爬加密反爬总结系列文章地址:Java网... 查看详情

pythonscrapy爬虫框架实战应用(代码片段)

通过上一节《PythonScrapy爬虫框架详解》的学习,您已经对Scrapy框架有了一个初步的认识,比如它的组件构成,配置文件,以及工作流程。本节将通过一个的简单爬虫项目对Scrapy框架做进一步介绍。首先看一个简单... 查看详情

常见的一些反爬虫策略(上篇)-java网络爬虫系统性学习与实战系列

常见的一些反爬虫策略(上篇)-Java网络爬虫系统性学习与实战系列(9)文章目录联系方式概述反爬虫策略通过User-Agent校验反爬(附上网上最全User-Agent爬虫名单)网上最全User-Agent爬虫名单设置访问频率限制IP限制Cookie限制Referer通... 查看详情

常见的一些反爬虫策略(上篇)-java网络爬虫系统性学习与实战系列

常见的一些反爬虫策略(上篇)-Java网络爬虫系统性学习与实战系列(9)文章目录联系方式概述反爬虫策略通过User-Agent校验反爬(附上网上最全User-Agent爬虫名单)网上最全User-Agent爬虫名单设置访问频率限制IP限制Cookie限制Referer通... 查看详情

python爬虫——pythonscrapy爬虫框架详解(代码片段)

Scrapy是一个基于Twisted实现的异步处理爬虫框架,该框架使用纯Python语言编写。Scrapy框架应用广泛,常用于数据采集、网络监测,以及自动化测试等。提示:Twisted是一个基于事件驱动的网络引擎框架,同样采用... 查看详情

网站常见的反爬虫和应对方法(转)

...自”BSDR“的一篇文章,文章里主要介绍了常见的反爬虫应对方法,下面是正文。常见的反爬虫  这几天在爬一个网站,网站做了很多反爬虫工作,爬起来有些艰难,花了一些时间才绕过 查看详情

常见的一些反爬虫策略破解方式-java网络爬虫系统性学习与实战系列(11)

常见的一些反爬虫策略破解方式-Java网络爬虫系统性学习与实战系列(11)文章目录联系方式概述通过User-Agent校验反爬最全User-Agent设置访问频率限制IP限制Cookie限制Referer通过蜜罐资源反爬动态变换网页结构基于用户行为反爬虫通... 查看详情

常见的一些反爬虫策略破解方式-java网络爬虫系统性学习与实战系列(11)

常见的一些反爬虫策略破解方式-Java网络爬虫系统性学习与实战系列(11)文章目录联系方式概述通过User-Agent校验反爬最全User-Agent设置访问频率限制IP限制Cookie限制Referer通过蜜罐资源反爬动态变换网页结构基于用户行为反爬虫通... 查看详情

pythonscrapy调试模式(代码片段)

scrapy通过命令行创建工程,通过命令行启动爬虫,那么有没有方式可以在IDE中调试我们的爬虫呢?实际上,scrapy是提供给我们工具的,1.首先在工程目录下新建一个脚本文件,作为我们执行爬虫的入口以取代命令行模式。2.编写... 查看详情

如何使用python解决网站的反爬虫

1、从用户请求的Headers反爬虫是最常见的反爬虫策略。伪装header。很多网站都会对Headers的User-Agent进行检测,还有一部分网站会对Referer进行检测(一些资源网站的防盗链就是检测Referer)。如果遇到了这类反爬虫机制,可以直接在... 查看详情

[信息安全]数据安全(反爬虫)之「防重放」策略

数据安全(反爬虫)之「防重放」策略转载:https://mp.weixin.qq.com/s/uwW8riLk1miyy7D6ITw_og本文将从API数据接口的层面讲一种技术方案,实现数据安全。一、API接口请求安全性问题API接口存在很多常见的安全性问题,... 查看详情

pythonscrapy管道学习,并拿在行练手爬虫项目(代码片段)

本篇博客的重点为scrapy管道pipelines的应用,学习时请重点关注。爬取目标站点分析本次采集的目标站点为:https://www.zaih.com/falcon/mentors,目标数据为在行高手数据。本次数据保存到MySQL数据库中,基于目标数据࿰... 查看详情