Python采集C站高校信息實(shí)戰(zhàn)示例
前言
大家好,我們今天來爬取c站的高校名單,把其高校名單,成員和內(nèi)容數(shù)獲取下來,不過,我們發(fā)現(xiàn)這個(gè)網(wǎng)站比我們平時(shí)多了一個(gè)驗(yàn)證,下面看看我是怎么解決的。
功能實(shí)現(xiàn)
話不多說,我們和平時(shí)一樣,發(fā)送我們的請(qǐng)求,按照平時(shí),我們看看代碼怎么寫。
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)
我們?cè)谶@里使用 requests 庫(kù)發(fā)送 GET 請(qǐng)求,并將 URL 和請(qǐng)求頭作為參數(shù)傳遞給 get 方法。請(qǐng)求的 URL 是 https://bizapi.csdn.net/community-cloud/v1/homepage/community/by/tag?deviceType=PC&tagId=37,表示查詢社區(qū)根據(jù)標(biāo)簽分類的數(shù)據(jù)。請(qǐng)求頭包含了 User-Agent 和 Accept 字段,分別表示客戶端的 User-Agent 和 Accept 協(xié)議類型。
不過我們會(huì)發(fā)現(xiàn),我們得不到數(shù)據(jù),就說明我們被反爬了,我嘗試了很多次,我們發(fā)現(xiàn)它做了一個(gè)驗(yàn)證。
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 是對(duì)請(qǐng)求內(nèi)容的簽名,用于驗(yàn)證請(qǐng)求的完整性和可信性。 簽名通常是通過使用私鑰和一種哈希算法(如 SHA256)對(duì)請(qǐng)求內(nèi)容進(jìn)行計(jì)算得到的。 如果請(qǐng)求頭中出現(xiàn)這三個(gè)參數(shù),放心,是為了反爬用的,當(dāng)然也可以用于限制請(qǐng)求頻率,防止惡意攻擊。
在解決該反爬問題時(shí),第一步就是要找到他們的加密點(diǎn)。尋找 x-ca-key、x-ca-nonce、x-ca-signature 加密位置這一步主要看你對(duì)開發(fā)者工具的使用熟練程度了,尋找任意一個(gè)攜帶該請(qǐng)求頭參數(shù)的請(qǐng)求,然后添加相應(yīng)斷點(diǎn)。通過請(qǐng)求地址中的部分關(guān)鍵字,即可添加 XHR 斷點(diǎn)。再次刷新頁(yè)面,可進(jìn)入斷點(diǎn)中,一般會(huì)停留在send()函數(shù)位置。 下面的步驟就是比較枯燥的了,需要一點(diǎn)點(diǎn)的解密,例如在本函數(shù)頭部找到headers,發(fā)現(xiàn)其參數(shù) x-ca-key、x-ca-nonce、x-ca-signature 已經(jīng)被賦值。
這里我們沒有做多頁(yè)爬蟲,就沒有去解密了,感興趣的朋友自己去嘗試。
內(nèi)容獲取
我們拿到了數(shù)據(jù),接下來就可以提取內(nèi)容了,我們看看代碼怎么寫,這里就很簡(jiǎn)單了。
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 響應(yīng) JSON 數(shù)據(jù),并在一個(gè)數(shù)組中提取數(shù)據(jù)。然后,它使用一個(gè) for 循環(huán)遍歷數(shù)組中的每個(gè)元素,提取 tagName 和 url 兩個(gè)字段,并使用 requests.get() 發(fā)送 GET 請(qǐng)求獲取數(shù)據(jù)。最后,它使用正則表達(dá)式從響應(yīng)文本中提取 num 數(shù)據(jù),并將其打印到控制臺(tái)上。
總結(jié)

我們這樣就獲取到了內(nèi)容,本文僅供學(xué)習(xí),更多關(guān)于Python采集C站高校信息的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Python數(shù)據(jù)可視化編程通過Matplotlib創(chuàng)建散點(diǎn)圖代碼示例
這篇文章主要介紹了Python數(shù)據(jù)可視化編程通過Matplotlib創(chuàng)建散點(diǎn)圖實(shí)例,具有一定借鑒價(jià)值,需要的朋友可以參考下。2017-12-12
如何使用python-opencv批量生成帶噪點(diǎn)噪線的數(shù)字驗(yàn)證碼
這篇文章主要介紹了如何使用python-opencv批量生成帶噪點(diǎn)噪線的數(shù)字驗(yàn)證碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12
已解決不小心卸載pip后怎么處理(重新安裝pip的兩種方式)
這篇文章主要介紹了已解決不小心卸載pip后怎么處理(重新安裝pip的兩種方式),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-04-04
python計(jì)算auc指標(biāo)實(shí)例
下面小編就為大家?guī)硪黄猵ython計(jì)算auc指標(biāo)實(shí)例。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-07-07
Python Django框架介紹之模板標(biāo)簽及模板的繼承
今天給大家?guī)鞵ython Django框架的相關(guān)知識(shí),文中對(duì)模板標(biāo)簽及模板的繼承介紹的非常詳細(xì),對(duì)正在學(xué)習(xí)python的小伙伴們有很好地幫助,需要的朋友可以參考下2021-05-05
淺談Python實(shí)現(xiàn)Apriori算法介紹
這篇文章主要介紹了淺談Python實(shí)現(xiàn)Apriori算法介紹,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-12-12

