前言
大家好,我们今天来爬取c站的高校名单,把其高校名单,成员和内容数获取下来,不过,我们发现这个网站比我们平时多了一个验证,下面看看我是怎么解决的。
功能实现
话不多说,我们和平时一样,发送我们的请求,按照平时,我们看看代码怎么写。
1
2
3
4
|
url = 'https://bizapi.csdn.net/community-cloud/v1/homepage/community/by/tag?deviceType=PC&tagId=37' headers = { 'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36' } response = requests.get(url = url,headers = headers) |
我们在这里使用 requests
库发送 GET 请求,并将 URL 和请求头作为参数传递给 get
方法。请求的 URL 是 https://bizapi.csdn.net/community-cloud/v1/homepage/community/by/tag?deviceType=PC&tagId=37
,表示查询社区根据标签分类的数据。请求头包含了 User-Agent
和 Accept
字段,分别表示客户端的 User-Agent 和 Accept 协议类型。
不过我们会发现,我们得不到数据,就说明我们被反爬了,我尝试了很多次,我们发现它做了一个验证。
1
2
3
4
5
6
7
8
9
10
|
headers = { 'accept' : 'application/json, text/plain, */*' , 'origin' : 'https://bbs.csdn.net' , 'referer' : 'https://bbs.csdn.net/college?utm_source=csdn_bbs_toolbar&spm=1035.2022.3001.8850&category=37' , 'user-agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36' , 'x-ca-key' : '203899271' , 'x-ca-nonce' : '13b10c23-6a9b-423e-92a7-b114bc2c7f48' , 'x-ca-signature' : 'Hhnf/RUARDM2jddNAkl2tJ6hpXfweWbY1U4/yh6FCZM=' , 'x-ca-signature-headers' : 'x-ca-key,x-ca-nonce' , } |
我们这里科普一下,x-ca-signature 是对请求内容的签名,用于验证请求的完整性和可信性。 签名通常是通过使用私钥和一种哈希算法(如 SHA256)对请求内容进行计算得到的。 如果请求头中出现这三个参数,放心,是为了反爬用的,当然也可以用于限制请求频率,防止恶意攻击。
在解决该反爬问题时,第一步就是要找到他们的加密点。寻找 x-ca-key、x-ca-nonce、x-ca-signature 加密位置这一步主要看你对开发者工具的使用熟练程度了,寻找任意一个携带该请求头参数的请求,然后添加相应断点。通过请求地址中的部分关键字,即可添加 XHR 断点。再次刷新页面,可进入断点中,一般会停留在send()函数位置。 下面的步骤就是比较枯燥的了,需要一点点的解密,例如在本函数头部找到headers,发现其参数 x-ca-key、x-ca-nonce、x-ca-signature 已经被赋值。
这里我们没有做多页爬虫,就没有去解密了,感兴趣的朋友自己去尝试。
内容获取
我们拿到了数据,接下来就可以提取内容了,我们看看代码怎么写,这里就很简单了。
1
2
3
4
5
6
7
|
data = responses.json()[ 'data' ] for list in data: tagName = list [ 'tagName' ] list_url = list [ 'url' ] res = requests.get(list_url) num = re.findall( '<div id="codetool">
我们这里使用
总结
我们这样就获取到了内容,本文仅供学习,更多关于Python采集C站高校信息的资料请关注服务器之家其它相关文章! 原文链接:https://juejin.cn/post/7228875876616962104 延伸 · 阅读
精彩推荐
|