Python使用lxml模組和Requests模組抓取HTML頁面的教程

來源:互聯網
上載者:User

標籤:解析   test   4.4   美的   from   取出   rom   匯入   代碼   

Web抓取
Web網站使用HTML描述,這意味著每個web頁面是一個結構化的文檔。有時從中 擷取資料同時保持它的結構是有用的。web網站不總是以容易處理的格式, 如 csv 或者 json 提供它們的資料。

這正是web抓取出場的時機。Web抓取是使用電腦程式將web頁面資料進行收集 並整理成所需格式,同時儲存其結構的實踐。

lxml和Requests
lxml(http://lxml.de/)是一個優美的擴充庫,用來快速解析XML以及HTML文檔 即使所處理的標籤非常混亂。我們也將使用 Requests (http://docs.python-requests.org/en/latest/#)模組取代內建的urllib2模組,因為其速度更快而且可讀性更好。你可以通過使用 pip install lxml 與 pip install requests 命令來安裝這兩個模組。

讓我們以下面的匯入開始:

from lxml import htmlimport requests

 

下一步我們將使用 requests.get 來從web頁面中取得我們的資料, 通過使用 html 模組解析它,並將結果儲存到 tree 中。

page = requests.get(‘http://econpy.pythonanywhere.com/ex/001.html‘)tree = html.fromstring(page.text)

tree 現在包含了整個HTML檔案到一個優雅的樹結構中,我們可以使用兩種 方法訪問:XPath以及CSS選取器。在這個例子中,我們將選擇前者。

XPath是一種在結構化文檔(如HTML或XML)中定位資訊的方式。一個關於XPath的 不錯的介紹參見 W3Schools 。

有很多工具可以擷取元素的XPath,如Firefox的FireBug或者Chrome的Inspector。 如果你使用Chrome,你可以右鍵元素,選擇 ‘Inspect element‘,高亮這段代碼, 再次右擊,並選擇 ‘Copy XPath‘。

在進行一次快速分析後,我們看到在頁面中的資料儲存在兩個元素中,一個是title是 ‘buyer-name‘ 的div,另一個class是 ‘item-price‘ 的span:

<div title="buyer-name">Carson Busses</div><span class="item-price">$29.95</span>

知道這個後,我們可以建立正確的XPath查詢並且使用lxml的 xpath 函數, 像下面這樣:

#這將建立buyers的列表:buyers = tree.xpath(‘//div[@title="buyer-name"]/text()‘)#這將建立prices的列表:prices = tree.xpath(‘//span[@class="item-price"]/text()‘)

 

讓我們看看我們得到了什麼:

print ‘Buyers: ‘, buyersprint ‘Prices: ‘, pricesBuyers: [‘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‘]

 

恭喜!我們已經成功地通過lxml與Request,從一個web頁面中抓取了所有我們想要的 資料。我們將它們以列表的形式存在記憶體中。現在我們可以對它做各種很酷的事情了: 我們可以使用Python分析它,或者我們可以將之儲存為一個檔案並向世界分享。

我們可以考慮一些更酷的想法:修改這個指令碼來遍曆該例資料集中剩餘的頁面,或者 使用多線程重寫這個應用從而提升它的速度。

Python使用lxml模組和Requests模組抓取HTML頁面的教程

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.