【月更第9篇】python 趣味案例,通过模糊文件名,获取CSDN资源榜真实下载地址
案例来源与分析
今天这篇博客非常有趣,是来源自78技术人的一个需求,有好友反馈在上传资源的时候,发现了下载频道的如下界面。
此时该好友的需求是:
期望得到这些优质资源的真实下载地址,去看一下下载数,瞻仰一下大佬,学习一下如何日赚700米。
接到这个需求之后,橡皮擦进行了简单的调查,最终结论是,该案例可以通过 Python 实现,并且还存在一定的反爬难度。
分析之后得到的逻辑如下:
- 查询一下请求接口,重点关注 API 部分,如果接口可以直接获取到文件真实地址,编码直接结束
- 如果真实地址被删减,通过其它途径(经验)得到真实地址
按照上述思路的第一条,通过开发者工具获取了接口数据,在得到接口数据之后,发现此路不通,原因如下所示:
获取到的接口数据如下所示:
上述接口返回的下载资源数据,仅包括如下值
id: 7280263
title: "**vb.net**开发**"
totalRevenue: 72600
id
:文件资源ID,属于资源唯一键,但由于无法获取上传者的ID,还是没办法直接调用资源下载地址;title
:文件名,但是缺少关键信息;totalRevenue
:收益数字,精确到分。
截止到这里,你会得到了一些残缺的信息,包含一个加 *
的资源名,一个资源ID。
再次查阅一下资源的下载地址,拿橡皮擦自己的资源举例如下:
https://download.csdn.net/download/hihell/84991631
地址参数模板说明如下:
https://download.csdn.net/download/用户ID/资源ID
从上文的开发者工具中我们得到了资源ID,那只是完整路径中的一部分,由于没有用户ID,还是无法拼凑出完整的连接,那只能凭借搜索引擎部分检索,去提取完整地址。
操作步骤如下所示,这里截图使用的是百度搜索,在搜索框输入下图内容,其中ID使用的是上述接口获取的资源ID。
但是又发现一个问题,这个相同资源ID,名称类似的文件,竟然文件名没有对应上,难道C站隐藏了部分重要信息?
一系列的逻辑落地解析完毕,下面就可以将逻辑转换为代码了,具体编码参见下文呈现。
编码时间
首先通过 Python 调用接口,获取文件ID,但这里由于该接口增加了反爬限制,而本篇博客也不想因为5条数据,就去研究C站的反爬原力,所以建议大家直接复制接口返回的数据集即可。
如果你希望研究一下C站的反爬手段,可以参考下图,其中重要的参数如下所示。
既然不需要反爬提取数据了,那直接复制 getGuidInfo
接口响应的数据即可,结果如下所示:
[
{
"id": 7280263,
"title": "**vb.net**开发**",
"totalRevenue": 72600
},
{
"id": 63290559,
"title": "**YOLOV5**模型**",
"totalRevenue": 68263
},
... ...
]
接下来使用 cn.bing
来获取请求结果集,其中请求数据的地址如下所示,里面的 wd
参数,即搜索地址,其余参数尽量携带,否则容易返回空数据。
https://cn.bing.com/search?q={wd}&form=QBLH&sp=-1&pq={wd}&sc=0-36&qs=n&sk=&cvid=850DEE65A66648489A8E615C4443FC1C
import requests
from lxml import etree
import time
datas = [
{
"id": 7280263,
"title": "**vb.net**开发**",
"totalRevenue": 72600
},
{
"id": 63290559,
"title": "**YOLOV5**模型**",
"totalRevenue": 68263
},
{
"id": 42517006,
"title": "**三维重建**Python**",
"totalRevenue": 64759
},
{
"id": 20658919,
"title": "**DirectX**工具**",
"totalRevenue": 62400
},
{
"id": 19713816,
"title": "**数据集**tf代码**",
"totalRevenue": 54112
}
]
headers = {
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9",
"Host": "cn.bing.com",
"User-Agent": "复制自己的 UA 即可",
}
for item in datas:
id = item["id"]
wd = f"download.csdn.net/download/*/{id}"
print(f"正在检索 {wd}")
res = requests.get(
f'https://cn.bing.com/search?q={wd}&form=QBLH&sp=-1&pq={wd}&sc=0-36&qs=n&sk=&cvid=850DEE65A66648489A8E615C4443FC1C',
headers=headers, timeout=3)
if res.text.strip() != "":
eles = etree.HTML(res.text)
li = eles.xpath('.//li[@class="b_algo"]')
print(li)
接下来只需要获取到第一个 li 内部的超链接地址即可。
if res.text.strip() != "":
eles = etree.HTML(res.text)
lis = eles.xpath('.//li[@class="b_algo"]')
real_href = lis[0].xpath('./div/h2/a/@href')
此时的输出结果如下所示,已经得到优质(赚钱)资源的真实下载地址了
正在检索 download.csdn.net/download/*/7280263
['https://download.csdn.net/download/u010484563/7280263']
正在检索 download.csdn.net/download/*/63290559
['https://download.csdn.net/download/ECHOSON/63290559']
正在检索 download.csdn.net/download/*/42517006
['https://download.csdn.net/download/guyuealian/42517006']
正在检索 download.csdn.net/download/*/20658919
['https://download.csdn.net/download/VBcom/20658919']
正在检索 download.csdn.net/download/*/19713816
['https://download.csdn.net/download/ECHOSON/19713816']
记录时间
2022年度 Flag,写作的 588 / 1024 篇。
可以关注我,点赞我、评论我、收藏我啦。
- 点赞
- 收藏
- 关注作者
评论(0)