建網(wǎng)站代碼百度搜索風(fēng)云榜排名
文章目錄
- 1.前言
- 2.HTTP請(qǐng)求頭的作用
- 3.在不添加headers時(shí)
- 4.反爬蟲(chóng)是什么?
- 5.在請(qǐng)求時(shí)添加headers
1.前言
本篇文章主要講解如何使用requests請(qǐng)求時(shí)添加headers,為什么要加headers呢?是因?yàn)橛行┙涌诓惶砑觝eaders時(shí),請(qǐng)求會(huì)失敗。
2.HTTP請(qǐng)求頭的作用
HTTP請(qǐng)求頭(Request Headers)是HTTP請(qǐng)求中的一部分,它們攜帶了客戶(hù)端發(fā)送到服務(wù)器的信息。這些信息可以幫助服務(wù)器更好地處理客戶(hù)端的請(qǐng)求。請(qǐng)求頭位于HTTP請(qǐng)求的方法行之后,消息體之前。它們提供了關(guān)于客戶(hù)端環(huán)境和請(qǐng)求的具體配置的信息,比如用戶(hù)代理信息、語(yǔ)言偏好設(shè)置、認(rèn)證憑據(jù)等。
headers的內(nèi)容如下(headers里面的鍵值對(duì)可以自定義):
3.在不添加headers時(shí)
接口URL:https://movie.douban.com/j/search_subjects
請(qǐng)求方法:GET
請(qǐng)求參數(shù):
接口返回?cái)?shù)據(jù):
使用requests發(fā)送請(qǐng)求:
import requestsurl = "https://movie.douban.com/j/search_subjects"
params = {"type":"movie","tag": "熱門(mén)","page_limit": 50,"page_start":0
}
r = requests.get(url=url, params=params)
print(r.status_code)
print(r.json())
運(yùn)行結(jié)果如下:
這里的得到了HTTP的狀態(tài)碼是418,是因?yàn)榫W(wǎng)站擁有反爬蟲(chóng)機(jī)制,先來(lái)認(rèn)識(shí)一下什么是反爬蟲(chóng)。
4.反爬蟲(chóng)是什么?
反爬蟲(chóng)(Anti-Web Scraping)是指網(wǎng)站采取的一系列措施和技術(shù)手段,旨在阻止或限制自動(dòng)化程序(如網(wǎng)絡(luò)爬蟲(chóng)或機(jī)器人)對(duì)網(wǎng)站內(nèi)容的抓取。這是因?yàn)橛行┚W(wǎng)站不希望自己的內(nèi)容被未經(jīng)授權(quán)的方式大量復(fù)制或使用,以保護(hù)自己的版權(quán)、數(shù)據(jù)安全或者用戶(hù)體驗(yàn)。下面是一些常見(jiàn)的反爬蟲(chóng)策略:
-
User-Agent檢測(cè):
- 網(wǎng)站會(huì)檢查請(qǐng)求中的User-Agent字段,以識(shí)別出那些明顯屬于自動(dòng)化工具的請(qǐng)求,并拒絕這些請(qǐng)求。
-
IP地址封禁:
- 如果某個(gè)IP地址在短時(shí)間內(nèi)發(fā)送了大量請(qǐng)求,可能會(huì)被認(rèn)定為爬蟲(chóng)并被封禁一段時(shí)間。
-
驗(yàn)證碼(CAPTCHA):
- 當(dāng)檢測(cè)到可疑活動(dòng)時(shí),網(wǎng)站可能會(huì)要求用戶(hù)通過(guò)驗(yàn)證碼來(lái)證明自己不是機(jī)器人。
-
JavaScript渲染:
- 一些網(wǎng)站使用JavaScript動(dòng)態(tài)加載內(nèi)容,使得簡(jiǎn)單的HTTP請(qǐng)求無(wú)法獲取完整的頁(yè)面內(nèi)容。
-
請(qǐng)求頻率限制(Rate Limiting):
- 對(duì)于API接口,網(wǎng)站可能設(shè)置每分鐘或每天的最大請(qǐng)求數(shù),超過(guò)這個(gè)數(shù)量就會(huì)拒絕服務(wù)。
-
Cookies和Session ID:
- 使用Cookies和Session ID來(lái)跟蹤用戶(hù)行為,如果發(fā)現(xiàn)異常行為,則可能阻止該用戶(hù)繼續(xù)訪問(wèn)。
-
偽裝內(nèi)容:
- 向爬蟲(chóng)顯示不同的內(nèi)容或錯(cuò)誤信息,以迷惑爬蟲(chóng)。
-
加密和混淆:
- 使用加密技術(shù)或混淆JavaScript代碼,使爬蟲(chóng)難以解析數(shù)據(jù)。
5.在請(qǐng)求時(shí)添加headers
解決上述問(wèn)題,我們可以模擬瀏覽器來(lái)發(fā)送請(qǐng)求
在剛才的headers中有一個(gè)User- Agent字段,用來(lái)描述客戶(hù)端軟件的身份信息。這個(gè)字符串通常包含了客戶(hù)端瀏覽器的名稱(chēng)、版本號(hào)、支持的操作系統(tǒng)以及其他相關(guān)信息。
定義一個(gè)變量來(lái)存放User-Agent的值,然后在請(qǐng)求中傳參即可
代碼如下:
import requestsurl = "https://movie.douban.com/j/search_subjects"
params = {"type":"movie","tag": "熱門(mén)","page_limit": 50,"page_start":0
}
headers = {"user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36"
}
r = requests.get(url=url, params=params, headers=headers)
print(r.status_code)
print(r.json())
requests中有一個(gè)**kwargs
這里底層是調(diào)用的request方法
在request方法中可以看到headers這個(gè)參數(shù)
運(yùn)行結(jié)果:
在headers中添加user-agent之后,請(qǐng)求就能正常返回了