Python爬虫之Scrapy如何应对网站反爬虫策略

   日期:2024-12-24     作者:o93v3       评论:0    移动:http://w.yusign.com/mobile/news/2370.html
核心提示:爬虫:自动获取网站数据的程序,关键是批量的获取 反爬虫:使用技术手段防止爬虫程序的方法 误伤:反爬

爬虫:自动获取网站数据的程序,关键是批量的获取

反爬虫:使用技术手段防止爬虫程序的方法

误伤:反爬技术将普通用户识别为爬虫,如果误伤过高,效果再好也不能用

成本:反爬虫需要的人力和机器成本

拦截:成功拦截爬虫,一般拦截率越高,误伤率越高

Python爬虫之Scrapy如何应对网站反爬虫策略

初级爬虫:简单粗暴,不管服务器压力,容易弄挂网站

数据保护:具有知识产权的数据

失控的爬虫:由于某些情况下,忘记或者无法关闭的爬虫

商业竞争对手:防止被对手爬走了数据

通过之前的执行流程图可以看到,Requests和Response之间有很多的Middleware,这个UserAgentMiddleware就是默认用来处理User-Agent的。

从源码可以看到,如果不在settings文件中定义USER_AGENT,那么就会使用默认的"Scrapy"

4.1 全局User-Agent

如果要定义全局默认的User-Agent,可以在settings.py文件中去定义

 

4.2 局部User-Agent

局部user-agent是在我们自己写的spider代码里面定义的,可以通过custom_settings来定义

 

4.3 fake-useragent(重点

官方地址:https://github.com/hellysmile/fake-useragent

默认维护的User-Agent的链接:https://fake-useragent.herokuapp.com/browsers/0.1.11(后面是最新版本号

4.3.1 安装模块

pip install fake-useragent

4.3.2 Middleware编写
 
4.3.3 settings配置
 
4.3.4 如何自定义生成的策略

fake-useragent默认支持很多种的user-agent的生成方式,有如下类型:ua.ie、ua.opera、ua.chrome等

我们有的时候就想只生产chrome的user-agent,那如何动态切换配置了

动态切换user-agent的生成策略

通过self.ua_type = crawler.settings.get("RANDOM_UA_TYPE", "random"),可以读取配置文件的数据

通过get_ua()函数可以动态调用对应的方法,相当于:self.ua.self.ua_type,但是python语法是不支持这样调用的。所以我们通过get_ua()这个内部函数来实现

 

RANDOM_UA_TYPE这个是自定义配置,默认为random

以后如果想改成chrome或其他的,只需要更改settings中的这个配置即可

 
 

有些网站会限制同一个IP频繁爬取网站,这个时候就需要用到IP代理池了。

IP代理推荐:https://zhuanlan.zhihu.com/p/33576641

5.1 爬取代理IP

5.2 实现随机取代理IP

5.2.1 数据库设计
 
5.2.2 代码
 
 
5.2.3 Middleware中间件
 
5.2.4 settings配置
 

5.3 总结

我们在爬取网站的时候,总体还是要采用后面讲的限速的策略,不要爬的太快了,一定要珍惜自己的IP

如果你想爬的更快的话,可以使用IP代理池进行爬取

5.4 其他好用的IP代理的实现

上面的代理IP都是爬取的免费的,免费的一般都不稳定,可以考虑一些付费的IP代理

5.4.1 scrapy-proxies

这个都是在settings文件中进行配置的,不支持数据库操作,所以可以自己对源码改一下。

官方地址:https://github.com/aivarsk/scrapy-proxies

5.4.2 scrapy-crawlera(收费

这个是代理IP商提供的开源代码,但是使用他们的代理IP是收费的

官方地址:https://github.com/scrapy-plugins/scrapy-zyte-smartproxy

官方文档:https://scrapy-zyte-smartproxy.readthedocs.io/en/latest/

5.4.2 Tor(洋葱浏览器)爬取网站

洋葱浏览器可以使用代理隐藏自己的真实IP地址,常用于黑客使用,我们的python也可以操作Tor来爬取网站

文章:https://copyfuture.com/blogs-details/2020051818370565011ksvjjtfy8inp9

6.1 编码实现(tesseract-ocr

这个识别准确度比较低,不太推荐使用

还可以使用之前我们写的opencv识别工具类:https://www.yuque.com/suifengbiji/kzz2hu/lufd1y#MKjYY

6.2 在线打码(推荐

图鉴:图片识别-广告识别-目标检测-准快信息技术有限公司

超级鹰:超级鹰验证码识别-专业的验证码云端识别服务,让验证码识别更快速、更准确、更强大

打码兔:打码兔-手机打码平台 - 打码app,正规打码网站

6.2.1 超级鹰打码平台代码

1)工具类

 

2)识别超级鹰自己的登录验证码

 

6.3 人工代码

后面是真人在给你识别,价格最贵,但是识别率肯定是最高的

将Cookie禁掉,就不会在Requests中携带cookie了,那网站就无法跟踪,适用于不需要登录的网站。

我们可以在scrapy中的settings.py文件中做全局配置

 

也可以在我们具体的spider代码中做自定义配置custom_settings

 
 

中文文档:AutoThrottle 扩展 — Scrapy 2.5.0 文档

官方文档:AutoThrottle extension — Scrapy 2.11.2 documentation

主要是通过这个AutoThrottle扩展来实现限制速度,可以在settings文件中配置

也可以在spider代码中自定义配置custom_settings

8.1 介绍

 
 

8.2 代码

 
 

我是@王哪跑,关注我的工众号,持续分享python干货,各类副业技巧及软件

     本文地址:http://w.yusign.com/news/2370.html    述古往 http://w.yusign.com/static/ , 查看更多
 
特别提示:本信息由相关用户自行提供,真实性未证实,仅供参考。请谨慎采用,风险自负。

举报收藏 0打赏 0评论 0
 
更多>同类资讯
0相关评论

相关文章
最新文章
推荐文章
推荐图文
资讯
点击排行
{
网站首页  |  关于我们  |  联系方式  |  用户协议  |  隐私政策  |  版权声明  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报  |  鄂ICP备2020018471号