Python采集C站高校信息实战示例

 更新时间:2023年05月05日 11:41:47   作者:极客飞虎  
这篇文章主要为大家介绍了Python采集C站高校信息实战示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

前言

大家好,我们今天来爬取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 数据,并将其打印到控制台上。

总结

我们这样就获取到了内容,本文仅供学习,更多关于Python采集C站高校信息的资料请关注脚本之家其它相关文章!

相关文章

  • 浅析Python与Java和C之间有哪些细微区别

    浅析Python与Java和C之间有哪些细微区别

    这篇文章主要介绍了Python与Java和C之间有哪些细微区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-08-08
  • 使用Python判断质数(素数)的简单方法讲解

    使用Python判断质数(素数)的简单方法讲解

    这篇文章主要介绍了使用Python判断质数(素数)的简单方法讲解,经常被用来做科学计算的Python处理这种小问题当然手到擒来^_-需要的朋友可以参考下
    2016-05-05
  • python使用mitmproxy抓取浏览器请求的方法

    python使用mitmproxy抓取浏览器请求的方法

    今天小编就为大家分享一篇python使用mitmproxy抓取浏览器请求的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-07-07
  • python+opencv实现动态物体追踪

    python+opencv实现动态物体追踪

    这篇文章主要为大家详细介绍了python+opencv实现动态物体的追踪,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-01-01
  • Python做屏幕录制工具的实现示例

    Python做屏幕录制工具的实现示例

    本文主要介绍了Python做屏幕录制工具的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-06-06
  • python数据类型强制转换实例详解

    python数据类型强制转换实例详解

    这篇文章主要介绍了python数据类型强制转换实例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-06-06
  • Python测试框架pytest高阶用法全面详解

    Python测试框架pytest高阶用法全面详解

    这篇文章主要为大家介绍了Python测试框架pytest高阶用法全面详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-05-05
  • python根据list重命名文件夹里的所有文件实例

    python根据list重命名文件夹里的所有文件实例

    今天小编就为大家分享一篇python根据list重命名文件夹里的所有文件实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-10-10
  • 零基础写python爬虫之HTTP异常处理

    零基础写python爬虫之HTTP异常处理

    我们在使用爬虫来抓取网页内容的时候,HTTP异常是必须要注意的一项,所以本文,我们来详细探寻一下HTTP异常处理的相关内容,通过一些具体的实例来分析一下,非常的简单,但是却很实用。
    2014-11-11
  • Scrapy爬虫实例讲解_校花网

    Scrapy爬虫实例讲解_校花网

    下面小编就为大家带来一篇Scrapy爬虫实例讲解_校花网。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-10-10

最新评论