Python采集C站高校信息实战示例
作者:极客飞虎 发布时间:2023-11-16 12:01:56
前言
大家好,我们今天来爬取c站的高校名单,把其高校名单,成员和内容数获取下来,不过,我们发现这个网站比我们平时多了一个验证,下面看看我是怎么解决的。
功能实现
话不多说,我们和平时一样,发送我们的请求,按照平时,我们看看代码怎么写。
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 协议类型。
不过我们会发现,我们得不到数据,就说明我们被反爬了,我尝试了很多次,我们发现它做了一个验证。
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 已经被赋值。
这里我们没有做多页爬虫,就没有去解密了,感兴趣的朋友自己去尝试。
内容获取
我们拿到了数据,接下来就可以提取内容了,我们看看代码怎么写,这里就很简单了。
data =responses.json()['data']
for list in data:
tagName = list['tagName']
list_url= list['url']
res = requests.get(list_url)
num = re.findall('<div title="(\d+)"',res.text)
print(tagName,list_url,num)
我们这里使用 responses.json()['data']
读取 API 响应 JSON 数据,并在一个数组中提取数据。然后,它使用一个 for 循环遍历数组中的每个元素,提取 tagName
和 url
两个字段,并使用 requests.get()
发送 GET 请求获取数据。最后,它使用正则表达式从响应文本中提取 num
数据,并将其打印到控制台上。
来源:https://juejin.cn/post/7228875876616962104


猜你喜欢
- 一.多表关系MySQL多表之间的关系可以概括为:一对一、一对多/多对一关系,多对多一对一关系一个学生只有一张身份证;一张身份证只能对应一学生
- 本文实例讲述了Python常见数据类型转换操作。分享给大家供大家参考,具体如下:类型转换主要针对几种存储工具:list、tuple、dict
- 今天冒出来一个想法,在仅知道数据库名的情况下,用asp得到数据库中的所有表名、所有表的字段名、以及所有字段中的内容。经过一段时间查询资料和修
- 数据是企业核心资产,数据对企业而言是最重要的工作之一。稍有不慎,极有可能发生数据无意泄露,甚至被黑客恶意窃取的风险。每年业界都会传出几起大事
- 1. 数据处理中很恶心,出现 RuntimeWarning: divide by zero encountered in divide发现自
- 本文实例总结了PHP图像处理技术。分享给大家供大家参考,具体如下:1、绘图场景: 验证码、图像水印、图像压缩处理php绘图坐标体系是从0,0
- 根本原因:python定义函数时,一般都会有指定返回值,如果没有显式指定返回值,那么python就会默认返回值为None我们输入的代码如下:
- 前言python学习之路任重而道远,要想学完说容易也容易,说难也难。很多人说python最好学了,但扪心自问,你会用python做什么了?刚
- 本文实例讲述了Python大数据之从网页上爬取数据的方法。分享给大家供大家参考,具体如下:myspider.py :#!/usr
- 一. 抛出异常Python用异常对象(exception object)表示异常情况,遇到错误后,会引发异常。如果异常对象并未被处理或捕捉,
- 背景遇到的两个问题:scroll 事件不触发、如何将 loading 状态放在无限加载组件中进行管理。无限加载组件在展示列表页数据时比较常见
- MVC和MTV框架 MVC Web服务器开发领域里著名的MVC模式,所谓MVC就是把Web应用分为模型(M),控制器(C)和视图(V)三层,
- 最近想研究下SQL SERVER2012 Enterprise版本的数据库,听说功能很强大。我是在win7上安装的,安装的过程很顺利,我在用
- python天数转日期字符串在利用python读取Excel的时候, 日期格式的单元格读取出来是数字,该数字表示1990年01月01日到该日
- 本文实例讲述了javascript实现Table排序的方法。分享给大家供大家参考。具体实现方法如下:<!DOCTYPE html PU
- 项目中使用的日志库是使用python官方库logging封装的,但是居然一直么有设置日志自动滚动,经常会受到告警说哪台机器磁盘空间又满,清理
- 记录一下安装win10+GeForce GTX1060+CUDA 9.0+cuDNN7.3+tensorflow-gpu 1.12.0+py
- 有一个网站A想找别的网站作为代理商,在代理商的页面上插入自己的广告。它提供一个注册页面给代理商,代理商注册后,会得到一个ID,
- Event是Javascript中的重要事件,event代表事件的状态,专门负责对事件的处理,它的属性和方法能帮助我们完成很多和用户交互的操
- 最近有点审美疲劳,以往看起来觉得漂亮的界面现在觉得很一般,以前觉得看来还行的界面现在觉得很丑了。想来是时候休息一下了。唯美觉得上次做的OA登