麻將網(wǎng)站怎么做的衡水seo營(yíng)銷
根據(jù)上一篇文章我們學(xué)會(huì)的如何使用請(qǐng)求庫(kù)和編寫請(qǐng)求函數(shù),這一次我們來學(xué)習(xí)一下爬蟲常用的小技巧。
自定義Headers
Headers是請(qǐng)求的一部分,包含了關(guān)于請(qǐng)求的元信息。我們可以在requests
調(diào)用中傳遞一個(gè)字典來自定義Headers。代碼如下
import requests
headers = {'User-Agent': 'My Custom User Agent','Accept': 'application/json','Authorization': 'Bearer YOUR_ACCESS_TOKEN','Content-Type': 'application/json'
}
res = requests.get(url='https://www.baidu.com/', headers=headers)
print(res.headers)
輸出結(jié)果
如果輸出的代碼看不懂,可以看下面代碼對(duì)比圖片讀懂代碼。
這些頭部信息對(duì)于開發(fā)者和網(wǎng)絡(luò)管理員來說非常重要,因?yàn)樗鼈兲峁┝岁P(guān)于服務(wù)器響應(yīng)和行為的詳細(xì)信息。理解這些頭部可以幫助你更好地處理HTTP請(qǐng)求和響應(yīng),以及優(yōu)化Web應(yīng)用程序的性能和安全性。
{'Accept-Ranges': 'bytes', //指示服務(wù)器支持的請(qǐng)求范圍類型
'Cache-Control': 'no-cache', //指定了響應(yīng)的緩存策略'Connection': 'keep-alive', //指示連接是否應(yīng)該在請(qǐng)求完成后保持打開狀態(tài)'Content-Length': '227', //響應(yīng)內(nèi)容的字節(jié)長(zhǎng)度
//定義了哪些內(nèi)容可以被加載到頁(yè)面上,以及頁(yè)面可以與哪些外部資源交互。這個(gè)頭部用于提高安全性,防止跨站腳本(XSS)攻擊'Content-Security-Policy': "frame-ancestors 'self' https://chat.baidu.com http://mirror-chat.baidu.com https://fj-chat.baidu.com https://hba-chat.baidu.com https://hbe-chat.baidu.com https://njjs-chat.baidu.com https://nj-chat.baidu.com https://hna-chat.baidu.com https://hnb-chat.baidu.com http://debug.baidu-int.com;", 'Content-Type': 'text/html', //響應(yīng)內(nèi)容的媒體類型'Date': 'Mon, 15 Apr 2024 09:46:00 GMT', //響應(yīng)生成的日期和時(shí)間'P3p': 'CP=" OTI DSP COR IVA OUR IND COM ", CP=" OTI DSP COR IVA OUR IND COM "', //公共隱私政策項(xiàng)目(P3P)的頭部,用于定義網(wǎng)站的隱私策略'Pragma': 'no-cache', //與Cache-Control類似,Pragma是一個(gè)HTTP/1.0的緩存指令,no-cache表示響應(yīng)不應(yīng)該被緩存。'Server': 'BWS/1.1', //服務(wù)器軟件的名稱和版本'Set-Cookie': 'BD_NOT_HTTPS=1; path=/; Max-Age=300, BIDUPSID=F36C5CA8D21142BD74B5207C59287DBD; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com, PSTM=1713174360; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com, BAIDUID=F36C5CA8D21142BD2FFC0E76C39C86DD:FG=1; max-age=31536000; expires=Tue, 15-Apr-25 09:46:00 GMT; domain=.baidu.com; path=/; version=1; comment=bd', //設(shè)置一個(gè)或多個(gè)Cookie,用于維持用戶會(huì)話、跟蹤用戶行為等'Traceid': '1713174360037795661812152107203751720698', //服務(wù)器為請(qǐng)求生成的唯一追蹤ID,用于調(diào)試和日志記錄'X-Ua-Compatible': 'IE=Edge,chrome=1', //指示服務(wù)器支持的瀏覽器兼容性'X-Xss-Protection': '1;mode=block'} //瀏覽器的安全頭部,用于啟用XSS保護(hù)機(jī)制
自定義Cookies
Cookies通常用于維持用戶的會(huì)話狀態(tài)。我們可以通過cookies
參數(shù)在requests
調(diào)用中傳遞一個(gè)RequestsCookieJar
對(duì)象或者一個(gè)字典來自定義Cookies。代碼如下
# 導(dǎo)入requests庫(kù)
import requests
# 自定義cookies
cookies = {'cookies_are':'working'}
# 發(fā)起請(qǐng)求
res = requests.get(url='http://httpbin.org/cookies', cookies=cookies)
# 打印響應(yīng)內(nèi)容
print(res.text)
這個(gè)代碼主要用來維持會(huì)話狀態(tài)
輸出結(jié)果
提示:自定義Cookies在爬蟲中通常用于維持會(huì)話(如登錄)、繞過防爬機(jī)制、跟蹤用戶行為、處理Cookies限制等。
重定向(allow_redirects)
在HTTP請(qǐng)求中,重定向是指服務(wù)器指示客戶端去訪問另一個(gè)URL的響應(yīng)。重定向是一種常見的Web機(jī)制,用于URL變更、負(fù)載均衡、內(nèi)容移動(dòng)等場(chǎng)景。
HTTP狀態(tài)碼中,301(Moved Permanently)、302(Found)、303(See Other)、307(Temporary Redirect)和308(Permanent Redirect)都是表示重定向的響應(yīng)碼
在網(wǎng)絡(luò)請(qǐng)求中,我們常常會(huì)遇到狀態(tài)碼是3開頭的重定向問題,在Requests中是默認(rèn)開啟允許重定向的,即遇到重定向時(shí),會(huì)自動(dòng)繼續(xù)訪問,這個(gè)行為由llow_redirects
參數(shù)來控制。
使用
allow_redirects
參數(shù)的場(chǎng)景包括:
- 當(dāng)你知道URL已經(jīng)更新,并且想要直接訪問新URL時(shí),可以禁用重定向,以獲取重定向響應(yīng)中的新URL。
- 當(dāng)你需要分析重定向鏈時(shí),可以通過禁用重定向并檢查
response.history
來獲取所有的重定向記錄。- 當(dāng)服務(wù)器返回的重定向可能包含敏感信息或不安全的內(nèi)容時(shí),禁用重定向可以防止客戶端無意中訪問這些URL。
通過靈活使用
allow_redirects
參數(shù),可以更好地控制requests
庫(kù)的行為,以適應(yīng)不同的網(wǎng)絡(luò)請(qǐng)求場(chǎng)景。
重定向是一種服務(wù)器端行為,它通過將用戶的請(qǐng)求從一個(gè)URL重定向到另一個(gè)URL來提供更好的用戶體驗(yàn)和管理網(wǎng)站內(nèi)容。重定向可以有以下作用:
-
網(wǎng)站更改:當(dāng)網(wǎng)站管理員決定更改網(wǎng)站的URL結(jié)構(gòu)或移動(dòng)頁(yè)面時(shí),重定向可以確?,F(xiàn)有的鏈接仍然有效,并將用戶正確地引導(dǎo)到新的位置。
-
域名重定向:當(dāng)網(wǎng)站有多個(gè)域名時(shí),可以使用重定向?qū)⒂脩粢龑?dǎo)到主要域名,以確保所有流量都指向一個(gè)位置。
-
防止重復(fù)內(nèi)容:重定向可以確保用戶訪問正確的標(biāo)準(zhǔn)化URL,從而避免搜索引擎索引多個(gè)相同內(nèi)容的URL。
-
統(tǒng)一資源:對(duì)于移動(dòng)設(shè)備和桌面設(shè)備,可以使用重定向?qū)⒂脩粢龑?dǎo)到適合其設(shè)備的不同版本的網(wǎng)站。
在網(wǎng)絡(luò)編程中,允許重定向可以確??蛻舳四軌蚋S服務(wù)器發(fā)送的重定向指令,從而獲得正確的資源。
簡(jiǎn)單代碼如下
#導(dǎo)入requests模塊
import requests
#發(fā)送請(qǐng)求 允許重定向
response = requests.get('http://example.com', allow_redirects=True)
#輸出響應(yīng)內(nèi)容
print(response.url)
注意:重定向(False=關(guān)閉重定向,True=開啟重定向
輸出結(jié)果:
最后一行打印出了響應(yīng)的URL,這對(duì)于檢查是否發(fā)生了重定向是很有用的。
重定向有許多操作,這里選用一個(gè)簡(jiǎn)單的部分,能夠讓大家一眼看懂
禁止證書驗(yàn)證(verify)
在爬蟲過程中,SSL證書是用于在客戶端(爬蟲)和服務(wù)器之間建立安全通信的重要工具。而需要SSL證書驗(yàn)證有以下原因:
-
數(shù)據(jù)加密: SSL證書確保了客戶端和服務(wù)器之間的數(shù)據(jù)傳輸是加密的。這意味著即使數(shù)據(jù)在傳輸過程中被攔截,攻擊者也無法輕易讀取或修改數(shù)據(jù)內(nèi)容。
-
身份驗(yàn)證: SSL證書還用于驗(yàn)證服務(wù)器的身份。當(dāng)爬蟲訪問一個(gè)使用SSL證書的服務(wù)器時(shí),它可以檢查證書是否由受信任的證書頒發(fā)機(jī)構(gòu)(CA)簽發(fā),以及證書中的信息是否與服務(wù)器聲稱的身份匹配。這有助于防止中間人攻擊和欺詐網(wǎng)站。
-
信任和聲譽(yù): 使用有效的SSL證書可以提高網(wǎng)站的信譽(yù)和用戶的信任度。對(duì)于爬蟲來說,確保與信任的服務(wù)器通信可以提高爬取數(shù)據(jù)的質(zhì)量和安全性。
-
遵守法規(guī): 某些法律法規(guī)要求網(wǎng)站和服務(wù)必須使用SSL證書來保護(hù)用戶數(shù)據(jù)。作為爬蟲開發(fā)者,遵守這些法規(guī)可以避免潛在的法律問題。
-
瀏覽器和庫(kù)的要求: 現(xiàn)代瀏覽器和網(wǎng)絡(luò)庫(kù)(如
requests
)默認(rèn)要求使用SSL證書。如果沒有有效的證書或證書驗(yàn)證失敗,瀏覽器和庫(kù)可能會(huì)拒絕連接或發(fā)出警告。 -
防止數(shù)據(jù)泄露: SSL證書有助于防止敏感數(shù)據(jù)(如登錄憑據(jù)、個(gè)人信息等)在傳輸過程中被竊取。這對(duì)于爬取可能包含敏感信息的網(wǎng)站尤為重要。
簡(jiǎn)單案例代碼
import requests# 關(guān)閉SSL證書驗(yàn)證
response = requests.get('https://www.baidu.com/', verify=False)
這個(gè)代碼用來關(guān)閉證書驗(yàn)證,通常情況下,不建議關(guān)閉,除非你信任這個(gè)網(wǎng)絡(luò)環(huán)境,否則可能會(huì)數(shù)據(jù)泄密或者中間人攻擊。大家自行驗(yàn)證即可😎(っ °Д °;)っ
輸出結(jié)果
解釋:輸出的信息包含以下內(nèi)容
-
InsecureRequestWarning: 這是一個(gè)警告,由
urllib3
庫(kù)發(fā)出,提示你的HTTPS請(qǐng)求沒有進(jìn)行證書驗(yàn)證。在Python 3中,如果你使用urllib3
庫(kù)進(jìn)行HTTPS請(qǐng)求,而沒有指定cert_reqs='CERT_REQUIRED'
來啟用證書驗(yàn)證,就會(huì)收到這個(gè)警告。這是因?yàn)闆]有證書驗(yàn)證的HTTPS請(qǐng)求容易受到中間人攻擊(MITM),所以強(qiáng)烈建議啟用證書驗(yàn)證以保證通信安全。 -
警告鏈接: 警告信息中提供了一個(gè)鏈接,指向
urllib3
的官方文檔,其中詳細(xì)介紹了如何處理SSL警告和如何配置證書驗(yàn)證。 -
HTML內(nèi)容: 這部分是百度首頁(yè)的HTML源碼片段。它包含了百度的登錄鏈接、搜索框、導(dǎo)航鏈接以及其他一些頁(yè)面元素。這個(gè)HTML片段可能是從網(wǎng)絡(luò)請(qǐng)求的響應(yīng)中提取出來的
設(shè)置超時(shí)(timeout)
超時(shí)時(shí)間應(yīng)該根據(jù)目標(biāo)服務(wù)器的響應(yīng)速度和網(wǎng)絡(luò)狀況來合理設(shè)置。過短的超時(shí)時(shí)間可能導(dǎo)致不必要的超時(shí)異常,而過長(zhǎng)的超時(shí)時(shí)間可能會(huì)導(dǎo)致爬蟲效率降低。因此要合理設(shè)置,提高爬蟲效率
import requests
# 設(shè)置超時(shí)
requests.get('https://www.baidu.com/', timeout=10)
print('ok')
輸出結(jié)果
這表示爬蟲沒有超時(shí),并成功響應(yīng)信息。
好了今日分享到此一游,各位點(diǎn)個(gè)贊,關(guān)注我不迷路