Python爬蟲(chóng)解析網(wǎng)頁(yè)的方法有哪些-創(chuàng)新互聯(lián)

小編給大家分享一下Python爬蟲(chóng)解析網(wǎng)頁(yè)的方法有哪些,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

創(chuàng)新互聯(lián)公司堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都網(wǎng)站建設(shè)、網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿(mǎn)足客戶(hù)于互聯(lián)網(wǎng)時(shí)代的隴南網(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!

用Python寫(xiě)爬蟲(chóng)工具在現(xiàn)在是一種司空見(jiàn)慣的事情,每個(gè)人都希望能夠?qū)懸欢纬绦蛉セヂ?lián)網(wǎng)上扒一點(diǎn)資料下來(lái),用于數(shù)據(jù)分析或者干點(diǎn)別的事情。

我們知道,爬蟲(chóng)的原理無(wú)非是把目標(biāo)網(wǎng)址的內(nèi)容下載下來(lái)存儲(chǔ)到內(nèi)存中,這個(gè)時(shí)候它的內(nèi)容其實(shí)是一堆HTML,然后再對(duì)這些HTML內(nèi)容進(jìn)行解析,按照自己的想法提取出想要的數(shù)據(jù),所以今天我們主要來(lái)講四種在Python中解析網(wǎng)頁(yè)HTML內(nèi)容的方法,各有千秋,適合在不同的場(chǎng)合下使用。

首先我們隨意找到一個(gè)網(wǎng)址,這時(shí)我腦子里閃過(guò)了豆瓣這個(gè)網(wǎng)站。嗯,畢竟是用Python構(gòu)建的網(wǎng)站,那就拿它來(lái)做示范吧。

我們找到了豆瓣的Python爬蟲(chóng)小組主頁(yè),看起來(lái)長(zhǎng)成下面這樣。

Python爬蟲(chóng)解析網(wǎng)頁(yè)的方法有哪些

讓我們用瀏覽器開(kāi)發(fā)者工具看看HTML代碼,定位到想要的內(nèi)容上,我們想要把討論組里的帖子標(biāo)題和鏈接都給扒出來(lái)。

Python爬蟲(chóng)解析網(wǎng)頁(yè)的方法有哪些

通過(guò)分析,我們發(fā)現(xiàn)實(shí)際上我們想要的內(nèi)容在整個(gè)HTML代碼的 這個(gè)區(qū)域里,那我們只需要想辦法把這個(gè)區(qū)域內(nèi)的內(nèi)容拿出來(lái)就差不多了。

現(xiàn)在開(kāi)始寫(xiě)代碼。

1: 正則表達(dá)式大法

正則表達(dá)式通常被用來(lái)檢索、替換那些符合某個(gè)模式的文本,所以我們可以利用這個(gè)原理來(lái)提取我們想要的信息。

參考以下代碼。

Python爬蟲(chóng)解析網(wǎng)頁(yè)的方法有哪些

在代碼第6行和第7行,需要手動(dòng)指定一下header的內(nèi)容,裝作自己這個(gè)請(qǐng)求是瀏覽器請(qǐng)求,否則豆瓣會(huì)視為我們不是正常請(qǐng)求會(huì)返回HTTP 418錯(cuò)誤。

在第7行我們直接用requests這個(gè)庫(kù)的get方法進(jìn)行請(qǐng)求,獲取到內(nèi)容后需要進(jìn)行一下編碼格式轉(zhuǎn)換,同樣是因?yàn)槎拱甑捻?yè)面渲染機(jī)制的問(wèn)題,正常情況下,直接獲取requests content的內(nèi)容即可。

Python模擬瀏覽器發(fā)起請(qǐng)求并解析內(nèi)容代碼:

rl = 'https://www.douban.com/group/491607/'headers = {"User-Agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:71.0) Gecko/20100101 Firefox/71.0"}response = requests.get(url=url,headers=headers).content.decode('utf-8')

正則的好處是編寫(xiě)麻煩,理解不容易,但是匹配效率很高,不過(guò)時(shí)至今日有太多現(xiàn)成的HTMl內(nèi)容解析庫(kù)之后,我個(gè)人不太建議再手動(dòng)用正則來(lái)對(duì)內(nèi)容進(jìn)行匹配了,費(fèi)時(shí)費(fèi)力。

主要解析代碼:

re_div = r'<table\s+class=\"olt\">[\W|\w]+</table>'pattern = re.compile(re_div)content = re.findall(pattern, str(response))re_link = r'<a .*?>(.*?)</a>'mm = re.findall(re_link, str(content), re.S|re.M)urls=re.findall(r"<a.*?href=.*?<\/a>", str(content), re.I|re.S|re.M)

2: requests-html

這個(gè)庫(kù)其實(shí)是我個(gè)人最喜歡的庫(kù),作則是編寫(xiě)requests庫(kù)的網(wǎng)紅程序員 Kenneth Reitz,他在requests的基礎(chǔ)上加上了對(duì)html內(nèi)容的解析,就變成了requests-html這個(gè)庫(kù)了。

下面我們來(lái)看看范例:

Python爬蟲(chóng)解析網(wǎng)頁(yè)的方法有哪些

我喜歡用requests-html來(lái)解析內(nèi)容的原因是因?yàn)樽髡咭罁?jù)幫我高度封裝過(guò)了,連請(qǐng)求返回內(nèi)容的編碼格式轉(zhuǎn)換也自動(dòng)做了,完全可以讓我的代碼邏輯簡(jiǎn)單直接,更專(zhuān)注于解析工作本身。

主要解析代碼:

links = response.html.find('table.olt', first=True).find('a')

安裝途徑: pip install requests-html

3: BeautifulSoup

大名鼎鼎的 BeautifulSoup庫(kù),出來(lái)有些年頭了,在Pyhton的HTML解析庫(kù)里屬于重量級(jí)的庫(kù),其實(shí)我評(píng)價(jià)它的重量是指比較臃腫,大而全。

還是來(lái)先看看代碼。

Python爬蟲(chóng)解析網(wǎng)頁(yè)的方法有哪些

soup = BeautifulSoup(response, 'html.parser')links = soup.findAll("table", {"class": "olt"})[0].findAll('a')

BeautifulSoup解析內(nèi)容同樣需要將請(qǐng)求和解析分開(kāi),從代碼清晰程度來(lái)講還將就,不過(guò)在做復(fù)雜的解析時(shí)代碼略顯繁瑣,總體來(lái)講可以用,看個(gè)人喜好吧。

安裝途徑: pip install beautifulsoup4

4: lxml的XPath

lxml這個(gè)庫(kù)同時(shí) 支持HTML和XML的解析,支持XPath解析方式,解析效率挺高,不過(guò)我們需要熟悉它的一些規(guī)則語(yǔ)法才能使用,例如下圖這些規(guī)則。

Python爬蟲(chóng)解析網(wǎng)頁(yè)的方法有哪些

來(lái)看看如何用XPath解析內(nèi)容。

主要解析代碼:

content = doc.xpath("//table[@class='olt']/tr/td/a")

Python爬蟲(chóng)解析網(wǎng)頁(yè)的方法有哪些

如上圖,XPath的解析語(yǔ)法稍顯復(fù)雜,不過(guò)熟悉了語(yǔ)法的話也不失為一種優(yōu)秀的解析手段,因?yàn)椤?/p>

安裝途徑: pip install lxml

四種方式總結(jié)

正則表達(dá)式匹配不推薦,因?yàn)橐呀?jīng)有很多現(xiàn)成的庫(kù)可以直接用,不需要我們?nèi)ゴ罅慷x正則表達(dá)式,還沒(méi)法復(fù)用,在此僅作參考了解。

BeautifulSoup是基于DOM的方式,簡(jiǎn)單的說(shuō)就是會(huì)在解析時(shí)把整個(gè)網(wǎng)頁(yè)內(nèi)容加載到DOM樹(shù)里,內(nèi)存開(kāi)銷(xiāo)和耗時(shí)都比較高,處理海量?jī)?nèi)容時(shí)不建議使用。不過(guò)BeautifulSoup不需要結(jié)構(gòu)清晰的網(wǎng)頁(yè)內(nèi)容,因?yàn)樗梢灾苯觙ind到我們想要的標(biāo)簽,如果對(duì)于一些HTML結(jié)構(gòu)不清晰的網(wǎng)頁(yè),它比較適合。

XPath是基于SAX的機(jī)制來(lái)解析,不會(huì)像BeautifulSoup去加載整個(gè)內(nèi)容到DOM里,而是基于事件驅(qū)動(dòng)的方式來(lái)解析內(nèi)容,更加輕巧。不過(guò)XPath要求網(wǎng)頁(yè)結(jié)構(gòu)需要清晰,而且開(kāi)發(fā)難度比DOM解析的方式高一點(diǎn),推薦在需要解析效率時(shí)使用。

requests-html 是比較新的一個(gè)庫(kù),高度封裝且源碼清晰,它直接整合了大量解析時(shí)繁瑣復(fù)雜的操作,同時(shí)支持DOM解析和XPath解析兩種方式,靈活方便,這是我目前用得較多的一個(gè)庫(kù)。

除了以上介紹到幾種網(wǎng)頁(yè)內(nèi)容解析方式之外還有很多解析手段,在此不一一進(jìn)行介紹了。

寫(xiě)一個(gè)爬蟲(chóng),最重要的兩點(diǎn)就是如何抓取數(shù)據(jù),如何解析數(shù)據(jù),我們要活學(xué)活用,在不同的時(shí)候利用最有效的工具去完成我們的目的。

以上是“Python爬蟲(chóng)解析網(wǎng)頁(yè)的方法有哪些”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!

分享標(biāo)題:Python爬蟲(chóng)解析網(wǎng)頁(yè)的方法有哪些-創(chuàng)新互聯(lián)
當(dāng)前網(wǎng)址:http://muchs.cn/article38/ddhepp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供面包屑導(dǎo)航、App設(shè)計(jì)、定制開(kāi)發(fā)、虛擬主機(jī)企業(yè)網(wǎng)站制作、品牌網(wǎng)站設(shè)計(jì)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都seo排名網(wǎng)站優(yōu)化