在第一篇博文中也提及到User-Agent,表示請(qǐng)求載體的身份,也就是說(shuō)明通過(guò)什么瀏覽器進(jìn)行訪問(wèn)服務(wù)器的,這一點(diǎn)很重要。
① UA檢測(cè)
門戶網(wǎng)站服務(wù)器會(huì)檢測(cè)請(qǐng)求載體的身份。如果檢測(cè)到載體的身份表示為某一款瀏覽器的請(qǐng)求,則說(shuō)明這是一個(gè)正常的請(qǐng)求;若檢測(cè)到載體身份標(biāo)識(shí)并不是基于任意一款瀏覽器,則說(shuō)明這是一個(gè)非正常的請(qǐng)求也就是爬蟲,服務(wù)器很有可能拒絕該請(qǐng)求!??!
② UA偽裝
讓爬蟲對(duì)應(yīng)的請(qǐng)求載體身份標(biāo)識(shí)進(jìn)行偽裝成某一款瀏覽器
項(xiàng)目
項(xiàng)目概述:用戶輸入指定的關(guān)鍵詞,之后通過(guò)百度搜索引擎查到的所有相關(guān)頁(yè)面進(jìn)行下載到本地
步驟:
① 打開百度,搜索任意關(guān)鍵字信息,查看地址欄信息
例如我這里搜索beyond
,地址欄信息為https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&tn=baidu&wd=beyond&oq=%25E9%25BB%2584%25E5%25AE%25B6%25E9%25A9%25B9&rsv_pq=86cafe360003cde6&rsv_t=6497SlvSbubKeEQiJKGnLL%2BCucYyWr9OJTHOTd0x%2Bbx0%2BViW%2FN75Q0avW1M&rqlang=cn&rsv_enter=1&rsv_dl=tb&rsv_sug3=6&rsv_sug1=4&rsv_sug7=100&rsv_sug2=0&rsv_btype=t&inputT=964&rsv_sug4=965
實(shí)則有用信息僅為https://www.baidu.com/s?wd=beyond
,你也可以單獨(dú)輸入該網(wǎng)址仍可接收到服務(wù)器反饋的相同頁(yè)面結(jié)果信息。(同理其他的搜索引擎也都類似)其中beyond為可變參數(shù),遇到可變參數(shù)需要把其放入到字典中去
②整理完url之后,我們需要獲取某個(gè)瀏覽器載體身份認(rèn)證信息,這里以Chrome為例,隨便打開一個(gè)網(wǎng)站(例如https://www.baidu.com/s?wd=beyond
),F(xiàn)12打開開發(fā)者工具,F(xiàn)5重新向服務(wù)器發(fā)出請(qǐng)求,Network下Name隨便找一個(gè)點(diǎn)進(jìn)入,就可以找到User-Agent信息,例如我的是這個(gè)User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36
,該信息就是Chrome瀏覽器的唯一身份認(rèn)證標(biāo)識(shí)
③在get方法中,傳入U(xiǎn)ser-Agent和用戶輸入的關(guān)鍵字信息即可(均為字典形式)文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-405000.html
完整代碼
import requests
if __name__ == '__main__':
#UA偽裝,獲取某個(gè)瀏覽器的User-Agent唯一載體身份標(biāo)識(shí)
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36'
}
#指定url
url = 'https://www.baidu.com/s?'#https://www.baidu.com/s?word=%E9%BB%84%E5%AE%B6%E9%A9%B9
#處理url攜帶的參數(shù),將參數(shù)封裝到字典中
keyword = input("please input a word:")
param = {
'wd':keyword
}
#對(duì)指定的url發(fā)起請(qǐng)求,對(duì)應(yīng)的url是攜帶參數(shù)的,并且請(qǐng)求過(guò)程中已經(jīng)處理了參數(shù)
response = requests.get(url=url,params=param,headers=headers)#若不傳入headers這個(gè)User-Agent信息,運(yùn)行程序之后,服務(wù)器并不會(huì)給這個(gè)響應(yīng)返回?cái)?shù)據(jù)信息。這說(shuō)明百度搜索引擎中采用了UA檢測(cè)反爬蟲機(jī)制
#獲取響應(yīng)
page = response.text
filename = keyword+".html"
#持久化存儲(chǔ)
with open('E:/Jupyter_workspace/study/python/'+filename,'w',encoding='utf-8') as fp:#將服務(wù)器返回的頁(yè)面信息存儲(chǔ)到本地指定路徑
fp.write(page)
print(filename,"保存成功")
運(yùn)行效果如下:文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-405000.html
到了這里,關(guān)于三、實(shí)戰(zhàn)---爬取百度指定詞條所對(duì)應(yīng)的結(jié)果頁(yè)面(一個(gè)簡(jiǎn)單的頁(yè)面采集器)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!