爬虫 404 try_和我一起学爬虫
前幾天就想寫一個(gè)爬蟲系列的文章,因?yàn)楸容^忙所以沒有寫(還不是因?yàn)閼?#xff09;,趁著現(xiàn)在屋里比較的涼爽,心也比較的靜,總結(jié)下目前遇到的一些爬蟲知識(shí),本系列將從簡(jiǎn)單的爬蟲開始說起,以后會(huì)逐漸的提升難度,同時(shí)會(huì)對(duì)反爬手段做一個(gè)總結(jié),以及用具體的事例來(lái)演示,不同的反爬現(xiàn)象和實(shí)現(xiàn)手段。
前言
本系列側(cè)重點(diǎn)是應(yīng)用和實(shí)戰(zhàn),所以,對(duì)于軟件的安裝這些基本操作不做詳細(xì)講解,我這里認(rèn)為你已經(jīng)有了一定的python基礎(chǔ),所以對(duì)于python的安裝一定會(huì)有一定的了解了,這里廢話不多說讓我們進(jìn)入正題。
環(huán)境準(zhǔn)備
鑒于大多數(shù)人的系統(tǒng)是windows系統(tǒng),所以這里的所有內(nèi)容都是在Windows下進(jìn)行的,另外推薦安裝谷歌瀏覽器,使用語(yǔ)言python,版本3.6(低版本不能使用requests_html)。主要的爬蟲模塊requests_html。
爬蟲具備的基本條件
作為一個(gè)合格的爬蟲,首先得有一個(gè)headers,如何理解headers,我們打開谷歌瀏覽器,然后F12,選擇network選項(xiàng)卡,打開百度的首頁(yè),然后打開然后選擇其中的一個(gè)鏈接,然后點(diǎn)擊新彈出的窗口的headers,看到有一個(gè)'Request Headers',我們看到下面紅框的內(nèi)容,這些由:組成的數(shù)據(jù)結(jié)構(gòu),共同構(gòu)成了一個(gè)headers,在python中可以把這些字段作為一個(gè)字典傳入。
爬蟲的代碼實(shí)現(xiàn)
下面我來(lái)看一個(gè)基本爬蟲代碼,爬取百度的導(dǎo)航欄文字內(nèi)容。
1.導(dǎo)入requests_html模塊。
2.創(chuàng)建一個(gè)session對(duì)象,目的是維持一次完整的會(huì)話。
session=HTMLSession()3.通過get方法訪問網(wǎng)絡(luò)
url='https://www.baidu.com' headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.62 Safari/537.36'} req=session.get(url=url,headers=headers)get方法需要傳入兩個(gè)參數(shù),一個(gè)是url,一個(gè)是headers(字典類型)。一般的我們傳入一個(gè)user_agent就可以愉快的使用了。(這里只是說一般的對(duì)于有先網(wǎng)站服務(wù)器還會(huì)監(jiān)測(cè)headers的其他屬性內(nèi)容)。我們會(huì)獲取一個(gè)response對(duì)象。
拓展:如果查看requests_html的源碼會(huì)發(fā)現(xiàn)默認(rèn)是給了幾個(gè)headers屬性的。
def default_headers():""":rtype: requests.structures.CaseInsensitiveDict"""return CaseInsensitiveDict({'User-Agent': default_user_agent(), #這個(gè)就是一個(gè)隨機(jī)的useragent'Accept-Encoding': ', '.join(('gzip', 'deflate')),#接收編碼類型'Accept': '*/*',#接收文件類型'Connection': 'keep-alive',#保持鏈接})4.獲取網(wǎng)頁(yè)返回的狀態(tài)碼
一般的我們把200狀態(tài)碼認(rèn)為是響應(yīng)成功(并不一定是你想要的結(jié)果,比如登陸失敗有些也是200)。
其他常見的還有,404網(wǎng)頁(yè)訪問失敗,500服務(wù)器拒絕訪問,302和301作為網(wǎng)頁(yè)的重定向。
5.獲取正確的網(wǎng)頁(yè)編碼
因?yàn)槊總€(gè)頁(yè)面的編碼不同,可能導(dǎo)致在解析的時(shí)候出現(xiàn)亂碼的情況,對(duì)此requests_html模塊為我們提供了一個(gè)可以高準(zhǔn)確率獲取編碼的方法,目前來(lái)看對(duì)于絕大對(duì)數(shù)html頁(yè)面是沒有問題的,所以可以放心使用。
6.查看獲取html源碼
此時(shí)我們已經(jīng)獲取了編碼之后的對(duì)象了,如果我們需要查看獲取的內(nèi)容以及編碼是否正確我們可以使用text屬性來(lái)獲取網(wǎng)頁(yè)的源碼,它是一個(gè)字符串格式的。
7.xpath表達(dá)式的使用
requets_html模塊的一個(gè)好處就是集合了眾多的網(wǎng)頁(yè)解析模塊比如,bs4,pyquery,lxml等,可以說相當(dāng)?shù)膹?qiáng)大了,requests_html通過response的html屬性調(diào)用xpath方法,來(lái)直接操作dom對(duì)象,通過觀察我們獲取百度導(dǎo)航欄的標(biāo)題的xpath,代碼我們可以這樣寫。
簡(jiǎn)單說下上面xpath表達(dá)式的含義,//從匹配選擇的當(dāng)前節(jié)點(diǎn)選擇文檔中的節(jié)點(diǎn),而不考慮它們的位置。/表示從根節(jié)點(diǎn)選取。后面跟的ediv表示是div節(jié)點(diǎn),中括號(hào)里面一般是做屬性判斷@id就是判斷id屬性然后取其值為ul的,后面緊跟的/a,表示上面div節(jié)點(diǎn)的下級(jí)所有含有a的節(jié)點(diǎn),然后后面的text()是表示獲取該節(jié)點(diǎn)的文本信息。
8綜合整理下上面的代碼如下:
輸出結(jié)果:
新聞 | hao123 | 地圖 | 視頻 | 貼吧 | 學(xué)術(shù) | 登錄 | 設(shè)置 | 更多產(chǎn)品好了,今天的內(nèi)容就到這,內(nèi)容比較的簡(jiǎn)單,簡(jiǎn)單的說了下爬蟲的基本思路,后面會(huì)一步步加大難度,如有任何問題和疑問歡迎留言。
關(guān)注微信公眾號(hào):python學(xué)習(xí)開發(fā) ,學(xué)習(xí)更多python知識(shí)
總結(jié)
以上是生活随笔為你收集整理的爬虫 404 try_和我一起学爬虫的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 四川:支持各地对购买新车、二手车置换新车
- 下一篇: redis 清空缓存_「镜头回放」简直了