【首发】某易跟帖篇频道,接口溯源分析,反爬新技巧,必掌握一下
theme: vue-pro
一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第24天,点击查看活动详情。
📢📢📢📢📢📢
💗 你正在阅读 【梦想橡皮擦】 的博客
⛳️ 实战场景
本篇博客的目标站点跟网易有关,以下是详细的描述信息。
- 目标站点:https%3A%2F%2Fcomment.tie.163.com%2FH5GDH6RA0552DNJF.html;
- 站点名称:\u7f51\u6613\u8ddf\u5e16
本次抓取的前提是假设你可以采集到列表页数据,列表页如下所示:
点击任意热帖,进入评论页,通过开发者工具捕获到如下信息。
- 请求地址:
https://Python脱敏处理163.com/api/v1/products/a2869674571f77b5a0867c3d71db5856/threads/H5GDH6RA0552DNJF/comments/newList?ibc=newspc&limit=30&showLevelThreshold=72&headLimit=1&tailLimit=2&offset=90&callback=jsonp_1650620067890&_=1650620067891
- 请求方式:GET
使用浏览器直接访问接口,可以获取到数据,但是其中涉及两个值需要进行分析,分别如下所示:
a2869674571f77b5a0867c3d71db5856
:一个 md5 加密之后的值,被加密参数未知;H5GDH6RA0552DNJF
:含义未知。
编写简单的请求代码,查看代码中是否有时间相关的密处理。
```python import requests
res = requests.get('https://Python脱敏处理163.com/api/v1/products/a2869674571f77b5a0867c3d71db5856/threads/H5GDH6RA0552DNJF/comments/newList?ibc=newspc&limit=30&showLevelThreshold=72&headLimit=1&tailLimit=2&offset=30&callback=jsonp_1650621196302&_=1650621196303') print(res.text) ```
数据直接返回了,看起来用不到复杂的解密技巧了,其中相关参数我们都能直接获取。
下面我们还是要找一下上文提及的两个参数,到底是如何计算得来的。
⛳️ 参数解密
由于该请求是 GET 请求,所以无法添加 XHR 断点,本篇博客学习一个新的断点添加方式。
鼠标移动到启动器上,直接点击 JS 文件,跳转到指定位置,添加断点,然后刷新页面即可。
上图中的断点是随意添加的,学习过程中你可以根据情况设置。
接下来查看调用堆栈,在函数头部显示请求链接已经生成,断点前移,重新刷新页面。
通过上图可以看到,t.url
已经存在数据,所以该变量的赋值操作还要靠前。
在堆栈中点击相关操作,可以看到 url
生成的位置如下所示。
在变量 a
的位置添加新的断点,预期是进入 ti()
函数。
最终的结果出现了,在 ti()
函数上面发现了变量 qe
的赋值,这里竟然写死了请求地址,实在有点出乎意料。
这时就剩下唯一的加密变量 ri
还未处理,向上查找该值的复制位置,最终发现如下所示:
ri
变量的值为 window.__tie__.thread.docId
,该值存在一个 docId
,猜测是文档 ID,基于此,反复核对之后,发现就是新闻的 ID 号,问题解决了。
接下来的代码编写就交给你了。
总结
本篇博客希望你能掌握通过网络快速添加断点,这一反爬调试技巧。
补充一个知识点
Python 列表推导式是什么
列表推导式是 Python 语言特有的一种语法结构,也可以看成是 Python 中一种独特的数据处理方式, 它在 Python 中用于 转换 和 过滤 数据。
其语法格式如下所示,其中 [if 条件表达式]
可省略。
python
[表达式 for 迭代变量 in 可迭代对象 [if 条件表达式]]
注意:学习列表推导式的前提是掌握 Python for 循环。
列表推导式中存在两个名词,一个是 列表,另一个是 推导式 ,列表我们很清楚,就是 Python 的一种数据类型, 而推导式只是一个普通的语法定义词,有的教程里,会将其叫做 解析式,二者是一样的概念。
列表推导式会返回一个列表,因此它适用于所有需要列表的场景。
怎么用
用于转换数据
可以将可迭代对象(一般是列表)中的数据,批量进行转换操作,例如将下述列表所有元素翻两倍。
python
my_list = [1,2,3]
代码如下所示:
python
my_list = [1, 2, 3]
new_list = [item * 2 for item in my_list]
print(new_list)
结果可以自行编译运行。
掌握上述语法的关键点是 item
,请重点关注 item
从 my_list
遍历而来,并且 item*2
尾部与 for
循环存在一个空格。
用于过滤数据
列表表达式,可以将列表中满足条件表达式的值进行筛选过滤,获取目标数据。
python
my_list = [1, 2, 3]
new_list = [item for item in my_list if item > 1]
print(new_list)
掌握上述语法的关键是 if
,其余要点是注意语法编写结构。
接下来你可以尝试将上述编程逻辑,修改为 for
循环语法,学习过程中要着重理解以上两种语法结构可以相互转换,
当你可以无缝将二者进行转换时,该技能你就掌握了。
有些人会将列表推导式当做 for 循环的简化版。
提高场景
再次查看推导式语法结构中,涉及了一个关键字,叫做 可迭代对象,因为我们可以把自己目前掌握的所有可迭代对象,
都进行一下尝试,例如使用 range()
函数。
python
my_list = [1, 2, 3]
new_list = [item for item in range(1, 10) if item > 5]
print(new_list)
检验是否掌握,可以回答下述两个问题。
- 如果可迭代对象是一个字典,你该如何操作?
- 如果可迭代对象位置使用了
enumerate()
函数,你该如何操作?
除了可迭代对象部分可以扩展知识点, if 表达式
中的 条件表达式 也支持各种布尔运算,如果用中文进行翻译,
表示把满足条件的元素,放置到新的列表中。
扩展知识
由于列表推导式涉及了数据类型,所以可大胆推断,还存在其它推导式语法,Python 也确实是这样设计的。
你可以继续学习下述内容,而且知识结构基本一致。
- 字典推导式
- 集合推导式
- 生成器推导式
列表推导式的学习,不要过于在意细节,也无需要求学会即掌握,因为该知识点属于语法糖(编程小技巧), 所以在初学阶段,了解即可,随着编程学习的深入,你会自然而然的将可用推导式的地方,修改为推导式。
📣 右下角有个大拇指,点赞的漂亮加倍
- 嗨,各位Python程序员,放弃selenium,试试年轻的Playwright如何?
- 09年的老电脑说想看一下CPU温度,作为Python工程师,怎能安装X大师?
- 如果你需要用Python搞个二维码,那应该收藏这篇博客
- 写给Python社群的第2课:Python逻辑语句,天天要写的 if 和 while
- 嗨,程序员,你知道高级工程师用的搜索引擎吗?
- 都2022年了,Python Web框架你不会只知道Django和Flask吧?
- 在座的Python爬虫工程师,你敢爬律师事务所站点吗?
- Python爬虫反爬,你应该从这篇博客开启,UA反爬,Cookie 特定参数反爬
- OpenGauss数据库在 CentOS 上的实践,配置篇
- 【Python技能树共建】动态渲染页面爬取
- 【Python技能树共建】Beautiful Soup
- 【首发字体反爬】猫X眼YingShi,我们又来欺负你了,用到了 OCR 识别技术
- 【首发】某易跟帖篇频道,接口溯源分析,反爬新技巧,必掌握一下
- 【首发】Python反爬,JS反爬串讲,从MAOX眼X开始,本文优先解决反爬参数 signKey
- 【首发】写Python爬虫,服务器返回数据加密了,套路解决法~,出版社,出版社
- 虎牙直播数据采集,为数据分析做储备,Python爬虫120例之第24例
- 我们的骄傲!非遗数据采集,来自官方的数据,Python爬虫无所不爬
- 3天掌握Flask开发项目系列博客之二,操作数据库
- 写给Python社群的第1课:初识Python,开篇知识点就选字符串吧~
- 升级【爸爸程序员】了?用Python给自己的宝贝下载200 绘本动画吧!