IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> 记录一次python爬虫与反爬行动 -> 正文阅读

[Python知识库]记录一次python爬虫与反爬行动

爬取目标:

首页 8d93120efc7aac31648363dabd3ff4e9
接口:805E4C9121CC89786CEE70F095EACBDF

使用工具及涉及知识点

语言:Python===3.6
模块:requests random time hashlib-->md5
浏览器:chrome96

事件起因

看到某群组里面讨论目标很难爬取,各种参数加密。于是抱着好奇心搞起…
网站本身有开发者平台提供api,但是有使用次数限制。

开启反爬之路

  1. 使用Chrome抓包工具找到接口入口网址,发现需要携带一堆参数提交POST请求
    在这里插入图片描述

  2. 直接使用现有的参数向目标接口发送请求(未携带header参数),得到{errorcod:50},请求失败,说明网站在请求头参数进行了反爬限制。

  3. 挨个尝试请求头参数:发现需要携带3个请求头参数User-Agent Cookies Referer,携带post表单发起请求,得到了正确的响应结果,BUT,更换查询词后,又收到了{errorcod:50}的错误。说明参数具有时效性或者绑定了查询词。开始debug js代码

  4. 根据堆栈根据找到js源码,查找加密参数位置,进行断点调试
    在这里插入图片描述

发现目标参数有15个,找到能看懂的一个位置进行解析(包含了sign和bv两个加密参数)。

var r = function(e) {
       var t = n.md5(navigator.appVersion)
         , r = "" + (new Date).getTime()
         , i = r + parseInt(10 * Math.random(), 10);
       return {
           ts: r,
           bv: t,
           salt: i,
           sign: n.md5("fanyideskweb" + e + i + "Y2FYu%TNSbMCxc3t2u^XT")
       }

通过阅读代码可以看出参数bv是一个固定值,当前客户端浏览器版本的md5加密值,bv=t=n.md5(navigator.appVersion)。
ts:时间戳
salt=i=ts+一位随机数
sign:从程序分析得不到结果,因为不知道参数e是什么。
打断点分析,很愉快,并不是什么加密,而是输入的查询字符串。
在这里插入图片描述

所有参数拿到,剩下的就是用python实现一些加密算法了

python模拟加密算法

  • 时间戳:python的时间戳和js的时间戳表现方式是有些不同的,这个需要注意lts = str(time.time()*1000).split('.')[0] # 当前时间戳
  • md5加密:在python中导入hashlib中的md5就可以直接模拟加密了
sign_str = 'fanyideskweb' + trans_word + salt + 'Y2FYu%TNSbMCxc3t2u^XT'
md = md5()
md.update(sign_str.encode())
sign = md.hexdigest()# 加密后的32位字符串

发送正式请求

    trans_word = str(input('please type a word.\n'))
    data = get_data(trans_word)
    # 没有容错机制,能跑进行
    res = requests.post(url=url, data=data, headers=headers)
    # 不要尝试去判断status_code==200,及时是错误的请求,也会返回200
    result = res.json()

    print('*'*20)
    print('查询结果是:\n')
    print(result['translateResult'][0][0]['tgt'])
    print('\n','*'*20)

很开心,得到了正确的请求响应结果
在这里插入图片描述

反爬工作到此结束,但是真正的工作才刚刚开始
我们的需求不可能是一个词,应该有很多,或者是一篇论文。所以含有很多问题需要处理。

TODO

  1. IP 请求次数限制。可维护一个代理池进行请求。

  2. 查询词字数限制问题。可对文本进行有效分割

  3. 程序应该具有识别文本格式并提取出查询词的能力。TXT WOERD PDF…
    最终程序

over!
首发掘金社区
链接:https://juejin.cn/post/7037431549821714446

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-12-04 13:24:12  更:2021-12-04 13:25:14 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 2:22:10-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码