python常见的反爬虫和应对方法?

本文探讨了常见的反爬虫技术,包括通过Headers、用户行为分析及动态页面加载等方式进行的反制措施,并提供了相应的应对策略,如使用代理IP、模拟用户行为及利用selenium+phantomJS模拟浏览器。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

常见的反爬虫和应对方法?

通过 Headers 反爬虫:
从用户请求的 Headers 反爬虫是最常见的反爬虫策略。很多网站都会对 Headers 的 User-Agent进行检测,还有一部分网站会对 Referer 进行检测(一些资源网站的防盗链就是检测 Referer)。如果遇到了这类反爬虫机制,可以直接在爬虫中添加 Headers,将浏览器的 User-Agent 复制到爬虫的Headers 中;或者将 Referer 值修改为目标网站域名。对于检测 Headers 的反爬虫,在爬虫中修改或者添加 Headers 就能很好的绕过。
基于用户行为反爬虫:
还有一部分网站是通过检测用户行为,例如同一 IP 短时间内多次访问同一页面,或者同一账户短时间内多次进行相同操作。大多数网站都是前一种情况,对于这种情况,使用 IP 代理就可以解决。可以专门写一个爬虫,爬取网上公开的代理 ip,检测后全部保存起来。这样的代理 ip 爬虫经常会用到,最好自己准备一个。有了大量代理 ip 后可以每请求几次更换一个 ip,这在 requests 或者 urllib2 中很容易做到,这样就能很容易的绕过第一种反爬虫。对于第二种情况,可以在每次请求后随机间隔几秒再进行下一次请求。有些有逻辑漏洞的网站,可以通过请求几次,退出登录,重新登录,继续请求来绕过同一账号短时间内不能多次进行相同请求的限制。
动态页面的反爬虫:
上述的几种情况大多都是出现在静态页面,还有一部分网站,我们需要爬取的数据是通过 ajax 请求得到,或者通过 JavaScript 生成的。首先用 Fiddler 对网络请求进行分析。如果能够找到 ajax 请求,也能分析出具体的参数和响应的具体含义,我们就能采用上面的方法,直接利用 requests 或者 urllib2 模拟 ajax 请求,对响应的 json 进行分析得到需要的数据。
能够直接模拟 ajax 请求获取数据固然是极好的,但是有些网站把 ajax 请求的所有参数全部加密了。我们根本没办法构造自己所需要的数据的请求。这种情况下就用selenium+phantomJS,调用浏览器内核,并利用 phantomJS 执行 js 来模拟人为操作以及触发页面中的 js 脚本。从填写表单到点击按钮再到滚动页面,全部都可以模拟,不考虑具体的请求和响应过程,只是完完整整的把人浏览页面获取数据的过程模拟一遍。用这套框架几乎能绕过大多数的反爬虫,因为它不是在伪装成浏览器来获取数据(上述的通过添加 Headers 一定程度上就是为了伪装成浏览器),它本身就是浏览器phantomJS 就是一个没有界面的浏览器,只是操控这个浏览器的不是人。利用selenium+phantomJS 能干很多事情,例如识别点触式(12306)或者滑动式的验证码,对页面表单进行暴力破解等。

本文也是作者辛辛苦苦找的,如果看后觉得对您有帮助的话希望加个关注或者留言(最起码还不点个赞啊。)

关注我的博客之后还会有更多的知识发布

作者:涛了

处理Python虫中的反爬虫机制是虫开发中的一个重要环节。以下是一些常见方法技巧: 1. **设置合理的请求头**: - 使用`requests`库时,可以通过`headers`参数设置请求头,模拟浏览器的请求。例如,设置`User-Agent`、`Referer`等字段。 ```python import requests headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3', 'Referer': 'https://www.example.com' } response = requests.get('https://www.example.com', headers=headers) ``` 2. **使用代理IP**: - 通过使用代理IP可以避免被目标网站封禁。可以使用`requests`库中的`proxies`参数来设置代理。 ```python proxies = { 'http': 'http://10.10.1.10:3128', 'https': 'https://10.10.1.10:1080', } response = requests.get('https://www.example.com', proxies=proxies) ``` 3. **控制请求频率**: - 避免频繁请求,可以设置随机延时,使用`time`库的`sleep`函数。 ```python import time import random time.sleep(random.uniform(1, 3)) # 随机延时1到3秒 ``` 4. **处理Cookies**: - 有些网站会通过Cookies来识别用户,可以手动设置Cookies或使用`requests`库中的`session`对象来自动处理Cookies。 ```python session = requests.Session() session.get('https://www.example.com/login') response = session.get('https://www.example.com/protected-page') ``` 5. **使用Selenium**: - 对于一些复杂的反爬虫机制,可以使用Selenium模拟浏览器行为。Selenium可以驱动浏览器执行JavaScript,处理动态内容。 ```python from selenium import webdriver driver = webdriver.Chrome() driver.get('https://www.example.com') content = driver.page_source driver.quit() ``` 6. **验证码处理**: - 对于验证码,可以考虑使用OCR工具识别,或者手动输入。对于复杂的验证码,可能需要借助第三方服务。 7. **动态更换User-Agent**: - 定期更换User-Agent,模拟不同的浏览器设备。 ```python user_agents = [ 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)...', 'Mozilla/5.0 (Macintosh; Intel Mac OS X)...', ... ] headers = { 'User-Agent': random.choice(user_agents), 'Referer': 'https://www.example.com' } ``` 通过以上方法,可以有效提高虫的稳定性成功率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值