“XX直聘”反爬绕过

使用mitmproxy绕过

Mitmproxy是一组工具,可为HTTP/1、HTTP/2和WebSocket提供交互式的、具有SSL/TLS功能的拦截代理,其功能包括:能够完成拦截并动态修改HTTP、HTTPS的请求和响应,保存完整的HTTP对话,并进行转发和分析,转发HTTP会话客户端,转发以前录制的服务器的HTTP响应,反向代理模式将流量转发到指定服务器,使用Python对HTTP流量进行脚本化更改等功能

使用Mitmproxy工具绕过cookie反爬策略,实现对“XX直聘”网站数据抓取

该反爬虫使用js验证用户环境是否正常,检测用户环境是否为自动化框架,访问该网站需要验证cookie字段,当通过selenium自动化框架访问“ XX直聘”网站时,会对cookie生成阶段置毒,造成cookie验证错误,所以需要对爬虫进行伪装,这里通过伪造Request Header来模拟浏览器发出请求,通过此方式能够正常获得“XX直聘”网站岗位详细信息数据,能够有效防止爬虫被拦截。

经过测试发现每个cookie可以使用五次,使用五次后需要更新cookie,每次cookie失效时通过浏览器访问URL,从数据包中捕获数据。这里使用Mitmproxy代理工具捕获数据包,从数据包中获取请求头。

Mitmproxy代理工具提供以下常用的API:

  1. http.HTTPFlow #实例 flow。
  2. flow.request.headers  #获取所有头信息,包含Host、User-Agent、Content-type等字段。
  3. flow.request.url #完整的请求地址,包含域名及请求参数,但是不包含放在body里面的请求参数。
  4. flow.request.pretty_url #同flow.request.url目前没看出什么差别。
  5. flow.request.host #域名。
  6. flow.request.method #请求方式。POST、GET等。

以上均为获取request信息的一些常用方法,对于response,同理

  1. flow.response.status_code #状态码
  2. flow.response.text#返回内容,已解码
  3. flow.response.content #返回内容,二进制
  4. flow.response.setText()#修改返回内容,不需要转码

本例需要使用flow.request.host,flow.request.url,flow.request.headers三个函数。 

编写addons.py脚本如下:

def requestheaders(self, flow: mitmproxy.http.HTTPFlow)
    if flow.request.host !='www.xxxx.com':
        return
    if "position" not in flow.request.url:
        return
    s = bytes(flow.request.headers)
    with open('header.txt','wb')as f:
        f.write(s)
        f.close()

执行脚本:mitmdump -s addons.py。

需要以管理员权限运行脚本,否则脚本无法正常运行。还需要安装证书,否则无法获取HTTPS数据包内容。

设置系统代理为127.0.0.1:8080,这样通过浏览器访问时,脚本将在后台处理发送的数据包。

该脚本捕获request.host为“www.xxxx.com”,并且URL中含有“position”字段的数据包,捕获数据包后,存储在本地的“header.txt”文件中。

当cookie失效时,进行更新cookie操作,通过浏览器访问URL,后台脚本获取cookie存储到本地,程序从本地文件中得到新的cookie,进行替换。执行以下代码:

os.system(f'"C:\Google\Chrome\Application\chrome.exe" {url}')

url 为XX直聘岗位地址。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值