介绍爬虫基本遇到的各种反爬虫机制与解决办法

一什么是爬虫和反爬虫?

爬虫:使用任何技术手段,批量获取网站信息的一种方式。
反爬虫:使用任何技术手段,阻止别人批量获取自己网站信息的一种方式。

二 Headers and referer 反爬机制

headers进行反爬是最常见的反爬虫策略。还有一些网站会对 Referer (上级链接)进行检测(机器行为不太可能通过链接跳转实现)
headers知识汇总
User-Agent会告诉网站服务器,访问者是通过什么工具来请求的,如果是爬虫请求,一般会拒绝,如果是用户浏览器,就会应答。

'''
host:提供了主机名及端口号
Referer 提供给服务器客户端从那个页面链接过来的信息(有些网站会据此来反爬)
Origin:Origin字段里只包含是谁发起的请求,并没有其他信息.(仅存于post请求)
User agent: 发送请求的应用程序名(一些网站会根据UA访问的频率间隔时间进行反爬)
proxies: 代理,一些网站会根据ip访问的频率次数等选择封ip.
cookie: 特定的标记信息,一般可以直接复制,对于一些变化的可以选择构造.
(session=requests.session()自动把cookie信息存入response对象中)`
'''

首部            描述

Accept          告诉服务器能够发送哪些媒体类型

Accept-Charset      告诉服务器能够发送哪些字符集

Accept-Encoding     告诉服务器能够发送哪些编码方式(最常见的是utf-8)

Accept-Language     告诉服务器能够发送哪些语言

Cache-control: 这个字段用于指定所有缓存机制在整个请求/响应链中必须服从的指令

三 ip限制

限制ip访问频率和次数进行反爬.

解决措施:构造自己的 IP 代理池,然后每次访问时随机选择代理(但一些 IP 地址不是非常稳定,需要经常检查更新)

四 UA限制

UA使用户访问网站时候的浏览器标识.
温馨提醒:
当然如果反爬对时间还有限制的话,可以在requests 设置timeout(最好是随机休眠,这样会更安全稳定,time.sleep())

解决措施,构建自己的UA池,每次python做requests访问时随机挂上UA标识,更好的模拟浏览器行为.
超级简单的请求头fake_useragent库(https://www.jianshu.com/p/b76df35aec93)

#随机请求头
import requests
from fake_useragent import UserAgent
ua = UserAgent()
headers = {'User-Agent': ua.random}
url = '待爬网页的url'
resp = requests.get(url, headers=headers)
##待补充 请求加睡眠时间

五.验证码反爬虫或者模拟登陆

图片验证码:通过简单的图像识别是可以完成
验证码识别的基本方法:截图,二值化、中值滤波去噪、分割、紧缩重排(让高矮统一)、字库特征匹配识别。

六 Ajax动态加载

Ajax动态加载的工作原理是:从网页的 url 加载网页的源代码之后,会在浏览器里执行JavaScript程序。
这些程序会加载出更多的内容,并把这些内容传输到网页中。这就是为什么有些网页直接爬它的URL时却
没有数据的原因。
解决方案:若使用审查元素分析”请求“对应的链接(方法:右键→审查元素→Network→清空,点击”加载更多
“,出现对应的GET链接寻找Type为text/html的,点击,查看get参数或者复制Request URL),循环过程。如果“请求”之前有页面,依据上一步的网址进行分析推导第1页。以此类推,抓取抓Ajax地址的数据。对返回的json使用requests中的json进行解析,使用eval()转成字典处理

抓包工具推荐:fiddler

七.cookie限制

一次打开网页会生成一个随机cookie,如果再次打开网页这个cookie不存在,那么再次设置,第三次打开仍然不存在,这就非常有可能是爬虫在工作了.

解决措施:在headers挂上相应的cookie或者根据其方法进行构造.

  • 2
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值