Scrapy绕过反爬虫策略汇总

本文详细介绍了Scrapy在爬取过程中可能遇到的反爬虫策略,包括ip封锁、xpath问题、robot协议、请求头封锁等,并提出了设置下载延迟、禁用Cookie、使用User Agent池和IP池等反反爬虫策略。同时讨论了网站如何识别爬虫及常见的反爬虫方法,如检查Headers参数、使用验证码、javascript渲染等。文章还提供了实战演练和解决方案,如使用高匿代理IP、处理验证码和应对加速乐等服务。
摘要由CSDN通过智能技术生成

一、Scrapy无法返回爬取内容的几种可能原因

1,ip封锁爬取

在dos窗口,输入 scrapy shell +你的网址在这里插入图片描述
response的返回状态码是521 - Web 服务器已关闭 - 源服务器拒绝了云服务器的连接!

HTTP状态码200,300,404等是什么意思?参考一下网址:
https://www.cnblogs.com/cjwxf/p/6186287.html
https://blog.csdn.net/tan6600/article/details/51584087

2,xpath路径不对
3,xpath路径出现font,tbody标签

把它去掉改成 ***/***,之后内容可以正常显示,说明scrapy识别不了这两个标签。

4,xpath路径不够明确

观察你要爬取网页html结构,对要爬取的元素位置,最好把它的类名或者是id名写上,以保证路径的唯一性。

5,robot协议

如果在dos窗口中已经可以提取出要爬取的内容了,说明xpath路径正确,但是在编写的爬虫文件中,执行spider却不能爬取到结果,而在执行爬虫程序的dos窗口中,你仔细观察,发现有robot错误,response的返回编码是503之类的异常编码,那就需要你在setting.py中,把ROBOTSTXT_OBEY = True 改为 False。

6,请求头封锁

这个网址在浏览器中可以打开,但是scrapy中不行,scrapy shell +网址来执行后出现下图连接错误
在这里插入图片描述
这是因为scrapy的默认请求头是:“User-Agent”:“Scrapy/1.1.2 (+http://scrapy.org)”被网站封锁了,所以你需要伪造一个网站的请求头去进入这个网站。
你执行scrapy shell https://www.qiushibaike.com/ -s USER_AGENT=‘Mozilla/5.0’ 发现成功访问,所以记得伪造请求头。

参考:https://blog.csdn.net/weixin_44841312/article/details/95670015
————————————————————————————————

在这里插入图片描述

二、网站如何识别爬虫?

方法1:http日志和流量分析,如果单位时间内某个IP访问频率和流量超过特定阈值就可以界定为爬虫(封禁IP)

方法2:检测Headers参数:一般有User-Agent,Referer、Cookies等

1.User-Agent是检查用户所用客户端的种类和版本,在Scrapy中,通常是在下载器中间件中进行处理。
2.Referer是检查此请求由哪里来,通常可以做图片的盗链判断。在Scrapy中,如果某个页面url是通过之前爬取的页面提取到,Scrapy会自动把之前爬取的页面url作为Referfer。也可以通过上面的方式自己定义Referfer字段。
3.网站可能会检测Cookie中session_id的使用次数,如果超过限制,就触发反爬策略。

方法3:在网页源码内放置一个对浏览器不可见的链接,正常用户使用浏览器是看不到该链接的当然也不会去点击,如果检测到该链接被点击,来访IP就会被界定为爬虫。

三、网站常见反爬虫策略?

1.临时或永久封禁来访ip

2.返回验证码

3.异步加载(ajax):使只爬取静态网页的爬虫什么也得不到

4.爬虫陷阱:让你爬取的内容变成其他和本网站无关的信息

5.加速乐的服务:在访问之前先判断客户端的cookie正不正确。如果不正确,返回521状态码,set-cookie并且返回一段js代码通过浏览器执行后又可以生成一个cookie,只有这两个cookie一起发送给服务器,才会返回正确的网页内容。

6.javascript渲染:网页开发者将重要信息放在网页中但不写入html标签中,而浏览器会自动渲染

五、实战演练

1、在setting修改默认的User-Agent、默认HEADERS

参考:
https://blog.csdn.net/weixin_43430036/article/details/84851714

2、IP代理(未验证)

import requests

url = "http://www.baidu.com"
proxies = {
   
  "http": "http://10.10.1.10:3128",
  "https": "http://10.10.1.10:1080",
}
response = requests.get(url, proxies=proxies)
print response.content

在这里插入图片描述

3、python爬虫添加请求头ÿ

在面对爬虫技术时,Scrapy可以采取一些措施进行爬虫。其中一种方法是通过降低请求频率来模仿人类用户的行为。在Scrapy的配置文件settings.py中,可以设置DOWNLOAD_DELAY参数来指定请求的时间间隔。通过延迟请求,使得爬虫的行为更接近真实用户的访问频率。例如,设置DOWNLOAD_DELAY = 3,表示两次请求之间的间隔为3秒。此外,还可以使用随机延迟时间来避免请求过于规律,进一步增加爬虫被识别的难度。 另一种爬虫的措施是修改Scrapy的User-Agent请求头。通过模拟不同的浏览器或设备类型,使得爬虫程序看起来更像是真实的用户在访问网站。这样可以绕过一些简单的爬虫技术,如基于User-Agent的验证。可以在Scrapy的中间件中设置User-Agent的随机切换,或者使用代理IP来发送请求,增加请求的多样性,提高爬虫的成功率。 此外,如果网站使用了robots.txt文件来限制爬虫访问,Scrapy可以通过在配置文件settings.py中取消ROBOTSTXT_OBEY的注释来忽略对robots.txt文件的遵守。这样可以强行爬取站点信息,绕过爬虫的限制。例如,取消如下代码的注释:ROBOTSTXT_OBEY = False。 综上所述,通过降低请求频率、修改User-Agent请求头以及忽略robots.txt文件,Scrapy可以采取一些爬虫的措施来应对网站的爬虫技术。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [Python Scrapy爬虫常见解决方案(包含5种方法)](https://blog.csdn.net/qq_30235073/article/details/96073042)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [Python scrapy 爬虫入门(七)突破爬虫技术](https://download.csdn.net/download/weixin_38670707/13749305)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值