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 命令來安裝這兩個模塊。
讓我們以下面的導入開始:
在python中安裝了lxml-4.3.2,在使用時發現導入etree時IDE中報錯Can not reference 'etree'....
etree是二進制文件了,希望下一個版本會有好的改善,在網上找了 段代碼,可以使用如下方式解決吧
下一步我們將使用 requests.get 來從web頁面中取得我們的數據, 通過使用 html 模塊解析它,并將結果保存到 tree 中。
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:
知道這個后,我們可以創建正確的XPath查詢并且使用lxml的 xpath 函數, 像下面這樣:
讓我們看看我們得到了什么:
恭喜!我們已經成功地通過lxml與Request,從一個web頁面中抓取了所有我們想要的 數據。我們將它們以列表的形式存在內存中。現在我們可以對它做各種很酷的事情了: 我們可以使用Python分析它,或者我們可以將之保存為一個文件并向世界分享。
我們可以考慮一些更酷的想法:修改這個腳本來遍歷該例數據集中剩余的頁面,或者 使用多線程重寫這個應用從而提升它的速度。
轉載鏈接:https://www.jb51.net/article/84356.htm
轉載于:https://blog.51cto.com/7605937/2366676