成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Python爬蟲解析網頁的4種方式 值得收藏

開發 后端
用Python寫爬蟲工具在現在是一種司空見慣的事情,每個人都希望能夠寫一段程序去互聯網上扒一點資料下來,用于數據分析或者干點別的事情。

 用Python寫爬蟲工具在現在是一種司空見慣的事情,每個人都希望能夠寫一段程序去互聯網上扒一點資料下來,用于數據分析或者干點別的事情。

[[287132]]

我們知道,爬蟲的原理無非是把目標網址的內容下載下來存儲到內存中,這個時候它的內容其實是一堆HTML,然后再對這些HTML內容進行解析,按照自己的想法提取出想要的數據,所以今天我們主要來講四種在Python中解析網頁HTML內容的方法,各有千秋,適合在不同的場合下使用。

首先我們隨意找到一個網址,這時我腦子里閃過了豆瓣這個網站。嗯,畢竟是用Python構建的網站,那就拿它來做示范吧。

我們找到了豆瓣的Python爬蟲小組主頁,看起來長成下面這樣。 

Python爬蟲解析網頁的4種方式 值得收藏

讓我們用瀏覽器開發者工具看看HTML代碼,定位到想要的內容上,我們想要把討論組里的帖子標題和鏈接都給扒出來。 

Python爬蟲解析網頁的4種方式 值得收藏

通過分析,我們發現實際上我們想要的內容在整個HTML代碼的 這個區域里,那我們只需要想辦法把這個區域內的內容拿出來就差不多了。

現在開始寫代碼。

1: 正則表達式大法

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

參考以下代碼。 

Python爬蟲解析網頁的4種方式 值得收藏

在代碼第6行和第7行,需要手動指定一下header的內容,裝作自己這個請求是瀏覽器請求,否則豆瓣會視為我們不是正常請求會返回HTTP 418錯誤。

在第7行我們直接用requests這個庫的get方法進行請求,獲取到內容后需要進行一下編碼格式轉換,同樣是因為豆瓣的頁面渲染機制的問題,正常情況下,直接獲取requests content的內容即可。

Python模擬瀏覽器發起請求并解析內容代碼: 

  1. url = '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'

正則的好處是編寫麻煩,理解不容易,但是匹配效率很高,不過時至今日有太多現成的HTMl內容解析庫之后,我個人不太建議再手動用正則來對內容進行匹配了,費時費力。

主要解析代碼: 

  1. 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

這個庫其實是我個人最喜歡的庫,作則是編寫requests庫的網紅程序員 Kenneth Reitz,他在requests的基礎上加上了對html內容的解析,就變成了requests-html這個庫了。

下面我們來看看范例: 

Python爬蟲解析網頁的4種方式 值得收藏

我喜歡用requests-html來解析內容的原因是因為作者依據幫我高度封裝過了,連請求返回內容的編碼格式轉換也自動做了,完全可以讓我的代碼邏輯簡單直接,更專注于解析工作本身。

主要解析代碼: 

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

安裝途徑: pip install requests-html

3: BeautifulSoup

大名鼎鼎的 BeautifulSoup庫,出來有些年頭了,在Pyhton的HTML解析庫里屬于重量級的庫,其實我評價它的重量是指比較臃腫,大而全。

還是來先看看代碼。 

Python爬蟲解析網頁的4種方式 值得收藏

 

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

BeautifulSoup解析內容同樣需要將請求和解析分開,從代碼清晰程度來講還將就,不過在做復雜的解析時代碼略顯繁瑣,總體來講可以用,看個人喜好吧。

安裝途徑: pip install beautifulsoup4

4: lxml的XPath

lxml這個庫同時 支持HTML和XML的解析,支持XPath解析方式,解析效率挺高,不過我們需要熟悉它的一些規則語法才能使用,例如下圖這些規則。 

Python爬蟲解析網頁的4種方式 值得收藏

來看看如何用XPath解析內容。

主要解析代碼: 

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

 Python爬蟲解析網頁的4種方式 值得收藏  

如上圖,XPath的解析語法稍顯復雜,不過熟悉了語法的話也不失為一種優秀的解析手段,因為。

安裝途徑: pip install lxml

四種方式總結

正則表達式匹配不推薦,因為已經有很多現成的庫可以直接用,不需要我們去大量定義正則表達式,還沒法復用,在此僅作參考了解。

BeautifulSoup是基于DOM的方式,簡單的說就是會在解析時把整個網頁內容加載到DOM樹里,內存開銷和耗時都比較高,處理海量內容時不建議使用。不過BeautifulSoup不需要結構清晰的網頁內容,因為它可以直接find到我們想要的標簽,如果對于一些HTML結構不清晰的網頁,它比較適合。

XPath是基于SAX的機制來解析,不會像BeautifulSoup去加載整個內容到DOM里,而是基于事件驅動的方式來解析內容,更加輕巧。不過XPath要求網頁結構需要清晰,而且開發難度比DOM解析的方式高一點,推薦在需要解析效率時使用。

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

除了以上介紹到幾種網頁內容解析方式之外還有很多解析手段,在此不一一進行介紹了。

寫一個爬蟲,最重要的兩點就是如何抓取數據,如何解析數據,我們要活學活用,在不同的時候利用最有效的工具去完成我們的目的。

 

責任編輯:華軒 來源: 今日頭條
相關推薦

2019-08-14 10:00:08

vue組件通信前端

2014-12-31 14:09:23

xml解析

2022-03-25 11:44:14

Scrapy爬蟲命令

2017-08-09 15:27:33

python爬蟲開發工具

2019-10-12 00:03:07

MyCat數據庫分庫分表

2021-03-18 14:35:36

爬蟲技術開發

2018-08-10 11:20:35

編程語言Python網絡爬蟲

2010-08-16 14:02:22

CSS

2023-11-28 08:34:39

Python工具

2024-07-31 08:33:17

2020-02-06 10:10:24

python程序代碼

2019-04-22 15:00:05

CSS前端開發

2018-08-03 16:40:06

前端前端框架微服務

2018-04-28 15:51:33

Mybatis方式傳遞

2022-07-22 09:55:02

Python練手題

2017-10-27 11:47:05

SQL數據庫優化

2017-01-03 17:51:21

AndroidViewHolder工具類

2013-07-22 10:01:03

JavascriptWeb

2020-11-08 14:43:25

Python列表去重編程

2020-04-27 08:31:29

單例模式Python軟件設計模式
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产不卡一区在线观看 | 国产69精品久久久久777 | 欧美日韩免费在线 | 日韩国产黄色片 | 欧美精品在线观看 | 日本天天操 | 欧美视频二区 | 9999国产精品欧美久久久久久 | 黄网站涩免费蜜桃网站 | 日韩a v在线免费观看 | 人人亚洲| 色视频在线观看 | 午夜国产 | 亚洲精品福利在线 | 久草网址 | 一区二区视频在线观看 | 青青草一区 | 欧美中文一区 | 日日干夜夜草 | 一区二区在线免费观看视频 | 超碰精品在线 | 在线观看国产91 | 视频一区二区中文字幕日韩 | 999免费网站 | 精品久久久久久久久久久久 | 日日碰狠狠躁久久躁96avv | 亚洲精品国产成人 | 亚洲国产成人久久综合一区,久久久国产99 | 一级a爱片性色毛片免费 | 精品一区二区三区在线观看国产 | 9999久久 | 欧美日韩国产一区二区三区 | 欧美午夜一区 | 精品少妇一区二区三区日产乱码 | 久久一级免费视频 | 四虎成人免费电影 | 香蕉av免费 | 国产在线播放av | www.日韩| 久久精品国产99国产 | 涩涩视频在线观看 |