Python3.5以上版本lxml导入etree报错Unresolved reference
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抓取出場的時(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)入開始:
在python中安裝了lxml-4.3.2,在使用時(shí)發(fā)現(xiàn)導(dǎo)入etree時(shí)IDE中報(bào)錯(cuò)Can not reference 'etree'....
etree是二進(jìn)制文件了,希望下一個(gè)版本會(huì)有好的改善,在網(wǎng)上找了 段代碼,可以使用如下方式解決吧
下一步我們將使用 requests.get 來從web頁面中取得我們的數(shù)據(jù), 通過使用 html 模塊解析它,并將結(jié)果保存到 tree 中。
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:
知道這個(gè)后,我們可以創(chuàng)建正確的XPath查詢并且使用lxml的 xpath 函數(shù), 像下面這樣:
讓我們看看我們得到了什么:
恭喜!我們已經(jīng)成功地通過lxml與Request,從一個(gè)web頁面中抓取了所有我們想要的 數(shù)據(jù)。我們將它們以列表的形式存在內(nèi)存中。現(xiàn)在我們可以對它做各種很酷的事情了: 我們可以使用Python分析它,或者我們可以將之保存為一個(gè)文件并向世界分享。
我們可以考慮一些更酷的想法:修改這個(gè)腳本來遍歷該例數(shù)據(jù)集中剩余的頁面,或者 使用多線程重寫這個(gè)應(yīng)用從而提升它的速度。
轉(zhuǎn)載鏈接:https://www.jb51.net/article/84356.htm
轉(zhuǎn)載于:https://blog.51cto.com/7605937/2366676
總結(jié)
以上是生活随笔為你收集整理的Python3.5以上版本lxml导入etree报错Unresolved reference的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql+秘密_mysql不被人知的秘
- 下一篇: 附全文 |《数字中国指数报告2019》重