Python使用lxml模塊和Requests模塊抓取HTML頁面的教程
Web抓取
Web站點(diǎn)使用HTML描述,這意味著每個(gè)web頁面是一個(gè)結(jié)構(gòu)化的文檔。有時(shí)從中 獲取數(shù)據(jù)同時(shí)保持它的結(jié)構(gòu)是有用的。web站點(diǎn)不總是以容易處理的格式, 如 csv 或者 json 提供它們的數(shù)據(jù)。
這正是web抓取出場(chǎng)的時(shí)機(jī)。Web抓取是使用計(jì)算機(jī)程序?qū)eb頁面數(shù)據(jù)進(jìn)行收集 并整理成所需格式,同時(shí)保存其結(jié)構(gòu)的實(shí)踐。
lxml和Requests
lxml(http://lxml.de/)是一個(gè)優(yōu)美的擴(kuò)展庫,用來快速解析XML以及HTML文檔 即使所處理的標(biāo)簽非常混亂。我們也將使用 Requests (http://docs.python-requests.org/en/latest/#)模塊取代內(nèi)建的urllib2模塊,因?yàn)槠渌俣雀於铱勺x性更好。你可以通過使用 pip install lxml 與 pip install requests 命令來安裝這兩個(gè)模塊。
讓我們以下面的導(dǎo)入開始:
from lxml import html import requests
下一步我們將使用 requests.get 來從web頁面中取得我們的數(shù)據(jù), 通過使用 html 模塊解析它,并將結(jié)果保存到 tree 中。
page = requests.get('http://econpy.pythonanywhere.com/ex/001.html') tree = html.fromstring(page.text)
tree 現(xiàn)在包含了整個(gè)HTML文件到一個(gè)優(yōu)雅的樹結(jié)構(gòu)中,我們可以使用兩種 方法訪問:XPath以及CSS選擇器。在這個(gè)例子中,我們將選擇前者。
XPath是一種在結(jié)構(gòu)化文檔(如HTML或XML)中定位信息的方式。一個(gè)關(guān)于XPath的 不錯(cuò)的介紹參見 W3Schools 。
有很多工具可以獲取元素的XPath,如Firefox的FireBug或者Chrome的Inspector。 如果你使用Chrome,你可以右鍵元素,選擇 ‘Inspect element',高亮這段代碼, 再次右擊,并選擇 ‘Copy XPath'。
在進(jìn)行一次快速分析后,我們看到在頁面中的數(shù)據(jù)保存在兩個(gè)元素中,一個(gè)是title是 ‘buyer-name' 的div,另一個(gè)class是 ‘item-price' 的span:
<div title="buyer-name">Carson Busses</div> <span class="item-price">$29.95</span>
知道這個(gè)后,我們可以創(chuàng)建正確的XPath查詢并且使用lxml的 xpath 函數(shù), 像下面這樣:
#這將創(chuàng)建buyers的列表: buyers = tree.xpath('//div[@title="buyer-name"]/text()') #這將創(chuàng)建prices的列表: prices = tree.xpath('//span[@class="item-price"]/text()')
讓我們看看我們得到了什么:
print 'Buyers: ', buyers print 'Prices: ', prices Buyers: ['Carson Busses', 'Earl E. Byrd', 'Patty Cakes', 'Derri Anne Connecticut', 'Moe Dess', 'Leda Doggslife', 'Dan Druff', 'Al Fresco', 'Ido Hoe', 'Howie Kisses', 'Len Lease', 'Phil Meup', 'Ira Pent', 'Ben D. Rules', 'Ave Sectomy', 'Gary Shattire', 'Bobbi Soks', 'Sheila Takya', 'Rose Tattoo', 'Moe Tell'] Prices: ['$29.95', '$8.37', '$15.26', '$19.25', '$19.25', '$13.99', '$31.57', '$8.49', '$14.47', '$15.86', '$11.11', '$15.98', '$16.27', '$7.50', '$50.85', '$14.26', '$5.68', '$15.00', '$114.07', '$10.09']
恭喜!我們已經(jīng)成功地通過lxml與Request,從一個(gè)web頁面中抓取了所有我們想要的 數(shù)據(jù)。我們將它們以列表的形式存在內(nèi)存中?,F(xiàn)在我們可以對(duì)它做各種很酷的事情了: 我們可以使用Python分析它,或者我們可以將之保存為一個(gè)文件并向世界分享。
我們可以考慮一些更酷的想法:修改這個(gè)腳本來遍歷該例數(shù)據(jù)集中剩余的頁面,或者 使用多線程重寫這個(gè)應(yīng)用從而提升它的速度。
相關(guān)文章
python 批量添加的button 使用同一點(diǎn)擊事件的方法
今天小編就為大家分享一篇python 批量添加的button 使用同一點(diǎn)擊事件的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-07-07Python實(shí)現(xiàn)將長圖制作成一個(gè)視頻
這篇文章主要為大家詳細(xì)介紹了Python如何實(shí)現(xiàn)將一個(gè)長圖制作成一個(gè)視頻,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-05-05PyQT5之使用QT?Designer創(chuàng)建基本窗口方式
這篇文章主要介紹了PyQT5之使用QT?Designer創(chuàng)建基本窗口方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-02-02基于Python實(shí)現(xiàn)文本文件轉(zhuǎn)Excel
Excel文件是我們常用的一種文件,在工作中使用非常頻繁。Excel中有許多強(qiáng)大工具,因此用Excel來處理文件會(huì)給我們帶來很多便捷。本文就來和大家分享一下Python實(shí)現(xiàn)文本文件轉(zhuǎn)Excel的方法,感興趣的可以了解一下2022-08-08Python編程實(shí)現(xiàn)雙鏈表,棧,隊(duì)列及二叉樹的方法示例
這篇文章主要介紹了Python編程實(shí)現(xiàn)雙鏈表,棧,隊(duì)列及二叉樹的方法,結(jié)合具體實(shí)例形式分析了Python簡(jiǎn)單實(shí)現(xiàn)數(shù)據(jù)結(jié)構(gòu)中雙鏈表,棧,隊(duì)列及二叉樹相關(guān)操作技巧,需要的朋友可以參考下2017-11-11