摘要:選取名為的所有屬性庫(kù)使用庫(kù)安裝官網(wǎng)安裝進(jìn)入命令行模式,執(zhí)行安裝進(jìn)入終端模式,執(zhí)行安裝依賴的類庫(kù)后,執(zhí)行安裝驗(yàn)證安裝導(dǎo)入模塊,如果沒(méi)有報(bào)錯(cuò)就安裝成功。輸出結(jié)果輸出結(jié)果多了一個(gè)聲明,對(duì)解析結(jié)果沒(méi)影響。
當(dāng)爬取到Html數(shù)據(jù)后,可以用正則對(duì)數(shù)據(jù)進(jìn)行提取,但有時(shí)候正則表達(dá)式編寫起來(lái)不方便,而且萬(wàn)一寫錯(cuò)了,可能導(dǎo)致匹配失敗。這時(shí)候就需要借助其他解析工具了。XML引入 什么是XML?
XML 指可擴(kuò)展標(biāo)記語(yǔ)言(EXtensible Markup Language)
XML 是一種標(biāo)記語(yǔ)言,很類似 HTML
XML 的設(shè)計(jì)宗旨是傳輸數(shù)據(jù),而非顯示數(shù)據(jù)
XML 的標(biāo)簽需要我們自行定義。
XML 被設(shè)計(jì)為具有自我描述性。
XML 是 W3C 的推薦標(biāo)準(zhǔn)
W3School官方文檔:http://www.w3school.com.cn/xm...
XML和HTML的區(qū)別語(yǔ)法要求不同
在html中不區(qū)分大小寫,在xml中嚴(yán)格區(qū)分。
在HTML中,有時(shí)不嚴(yán)格,如果上下文清楚地顯示出段落或者列表鍵在何處結(jié)尾,那么你可以省略
或者之類的結(jié)束標(biāo)記。在XML中,是嚴(yán)格的樹狀結(jié)構(gòu),絕對(duì)不能省略掉結(jié)束標(biāo)記。在XML中,擁有單個(gè)標(biāo)記而沒(méi)有匹配的結(jié)束標(biāo)記的元素必須用一個(gè)/ 字符作為結(jié)尾。這樣分析器就知道不用查找結(jié)束標(biāo)記了。
在XML中,屬性值必須分裝在引號(hào)中。在HTML中,引號(hào)是可用可不用的。
在HTML中,可以擁有不帶值的屬性名。在XML中,所有的屬性都必須帶有相應(yīng)的值。
在XML文檔中,空白部分不會(huì)被解析器自動(dòng)刪除;但是html是過(guò)濾掉空格的。
設(shè)計(jì)目標(biāo)不同
XML被設(shè)計(jì)為傳輸和存儲(chǔ)數(shù)據(jù),其焦點(diǎn)是數(shù)據(jù)的內(nèi)容。
HTML顯示數(shù)據(jù)以及如何更好顯示數(shù)據(jù)。
XML的節(jié)點(diǎn)關(guān)系1、父(parent)
每個(gè)元素以及屬性都有一個(gè)父。
下面是一個(gè)簡(jiǎn)單的XML例子中,book 元素是 title、author、year 以及 price 元素的父:
Harry Potter J K. Rowling 2005 29.99
2、 子(Children)
元素節(jié)點(diǎn)可有零個(gè)、一個(gè)或多個(gè)子。
在下面的例子中,title、author、year 以及 price 元素都是 book 元素的子:
Harry Potter J K. Rowling 2005 29.99
3、 同胞(Sibling)
擁有相同的父的節(jié)點(diǎn)
在下面的例子中,title、author、year 以及 price 元素都是同胞:
Harry Potter J K. Rowling 2005 29.99
4、 先輩(Ancestor)
某節(jié)點(diǎn)的父、父的父,等等。
在下面的例子中,title 元素的先輩是 book 元素和 bookstore 元素:
Harry Potter J K. Rowling 2005 29.99
5、 后代(Descendant)
某個(gè)節(jié)點(diǎn)的子,子的子,等等。
在下面的例子中,bookstore 的后代是 book、title、author、year 以及 price 元素:
Xpath 什么是Xpath?Harry Potter J K. Rowling 2005 29.99
Xpath,全稱XML Path Language,即XML路徑語(yǔ)言,它是一門在XML文檔中查找信息的語(yǔ)言,可用來(lái)在 XML 文檔中對(duì)元素和屬性進(jìn)行遍歷。。最初是用來(lái)搜尋XML文檔的,但是它也適用與HTML文檔的搜索。
所以在做爬蟲時(shí),可以使用XPath來(lái)做相應(yīng)的信息抽取。
W3School官方文檔:http://www.w3school.com.cn/xp...
Xpath開發(fā)工具開源的XPath表達(dá)式編輯工具:XMLQuire(XML格式文件可用)
Chrome插件 XPath Helper
Firefox插件 XPath Checker
使用XpathXPath 使用路徑表達(dá)式來(lái)選取 XML 文檔中的節(jié)點(diǎn)或者節(jié)點(diǎn)集。這些路徑表達(dá)式和我們?cè)诔R?guī)的電腦文件系統(tǒng)中看到的表達(dá)式非常相似。
1、Xpath常用規(guī)則
表達(dá)式 | 描述 |
---|---|
nodename | 選取此節(jié)點(diǎn)的所有子節(jié)點(diǎn) |
/ | 從當(dāng)前節(jié)點(diǎn)選取直接子節(jié)點(diǎn) |
// | 從當(dāng)前節(jié)點(diǎn)選取子孫節(jié)點(diǎn) |
. | 選取當(dāng)前節(jié)點(diǎn) |
.. | 選取當(dāng)前節(jié)點(diǎn)的父節(jié)點(diǎn) |
@ | 選取屬性 |
2、Xpath使用示例
以下面xmL文檔為例:
Harry Potter J K. Rowling 2005 29.99
路徑表達(dá)式 | 結(jié)果 |
---|---|
bookstore | 選取bookstore元素的所有子節(jié)點(diǎn) |
/bookstore | 選取根元素bookstore。注:假如路徑起始于正斜杠/,則此路徑代表某元素的絕對(duì)路徑 |
bookstore/book | 選取屬于bookstore的子元素的所有book元素 |
//book | 選取所有book元素,不管在文檔的任何位置 |
bookstore//book | 選擇屬于 bookstore 元素的后代的所有 book 元素,而不管它們位于 bookstore 之下的什么位置。 |
//@lang | 選取名為lang的所有屬性 |
lxml官網(wǎng)
Github
1、window安裝
cmd進(jìn)入命令行模式,執(zhí)行
pip3 install lxml
2、ubuntu16.04安裝
ctrl+alt+t進(jìn)入終端模式,執(zhí)行:
sudo apt-get install -y build-essential libssl-devl libffi-dev libxml2-dev libxslt1-dev zlib1g-dev
安裝依賴的類庫(kù)后,執(zhí)行pip安裝:
sudo pip3 install lxml
3、驗(yàn)證安裝
導(dǎo)入lxml模塊,如果沒(méi)有報(bào)錯(cuò)就安裝成功。
$ python3 >>> import lxmletree模塊使用
初步使用
文件名lxml_test.py
# 使用 lxml 的 etree 庫(kù) from lxml import etree text = """""" #利用etree.HTML,將字符串解析為HTML文檔,etree模塊可自動(dòng)修正HTML文本 html = etree.HTML(text) # 按字符串序列化HTML文檔 ret = etree.tostring(html) # torstring()方法返回的結(jié)果是bytes類型,這里用decode()方法將其轉(zhuǎn)化為字符串 print(ret.decode("utf-8"))
- first item
- second item
- third item
- fourth item
- fifth item # 注意,此處缺少一個(gè)
閉合標(biāo)簽
輸出結(jié)果:
etree模塊可以自動(dòng)修正 html 代碼,例子里不僅補(bǔ)全了 li 標(biāo)簽,還添加了 body,html 標(biāo)簽。
文件讀取
除了直接讀取字符串,lxml還支持從文件里讀取內(nèi)容。這里我將上面的lxml_test.py文件執(zhí)行后的內(nèi)容保存為test.html
python lxml_test.py >> test.html
內(nèi)容就是上面的輸出結(jié)果 cat test.html:
使用etree.parse()方法來(lái)讀取文件。
from lxml import etree html = etree.parse("./test.html",HTMLParser()) ret = etree.tostring(html) print(ret.decode("utf-8"))
輸出結(jié)果
輸出結(jié)果多了一個(gè)DOCTYPE聲明,對(duì)解析結(jié)果沒(méi)影響。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/43239.html
摘要:上一篇文章網(wǎng)絡(luò)爬蟲實(shí)戰(zhàn)與正則表達(dá)式抓取貓眼電影排行下一篇文章網(wǎng)絡(luò)爬蟲實(shí)戰(zhàn)解析庫(kù)的使用上一節(jié)我們實(shí)現(xiàn)了一個(gè)最基本的爬蟲,但提取頁(yè)面信息時(shí)我們使用的是正則表達(dá)式,用過(guò)之后我們會(huì)發(fā)現(xiàn)構(gòu)造一個(gè)正則表達(dá)式還是比較的繁瑣的,而且萬(wàn)一有一點(diǎn)地 上一篇文章:Python3網(wǎng)絡(luò)爬蟲實(shí)戰(zhàn)---27、Requests與正則表達(dá)式抓取貓眼電影排行下一篇文章:Python3網(wǎng)絡(luò)爬蟲實(shí)戰(zhàn)---29、解析庫(kù)的使用:...
摘要:是最有名的爬蟲框架之一,可以很方便的進(jìn)行抓取,并且提供了很強(qiáng)的定制型,這里記錄簡(jiǎn)單學(xué)習(xí)的過(guò)程和在實(shí)際應(yīng)用中會(huì)遇到的一些常見問(wèn)題一安裝在安裝之前有一些依賴需要安裝,否則可能會(huì)安裝失敗,的選擇器依賴于,還有網(wǎng)絡(luò)引擎,下面是下安裝的過(guò)程下安裝安裝 scrapy是python最有名的爬蟲框架之一,可以很方便的進(jìn)行web抓取,并且提供了很強(qiáng)的定制型,這里記錄簡(jiǎn)單學(xué)習(xí)的過(guò)程和在實(shí)際應(yīng)用中會(huì)遇到的一...
摘要:學(xué)習(xí)爬蟲的背景了解。但是搜索引擎蜘蛛的爬行是被輸入了一定的規(guī)則的,它需要遵從一些命令或文件的內(nèi)容,如標(biāo)注為的鏈接,或者是協(xié)議。不同領(lǐng)域不同背景的用戶往往具有不同的檢索目的和需求,搜索引擎無(wú)法提供針對(duì)具體某個(gè)用戶的搜索結(jié)果。 學(xué)習(xí)python爬蟲的背景了解。 大數(shù)據(jù)時(shí)代數(shù)據(jù)獲取方式 如今,人類社會(huì)已經(jīng)進(jìn)入了大數(shù)據(jù)時(shí)代,數(shù)據(jù)已經(jīng)成為必不可少的部分,可見數(shù)據(jù)的獲取非常重要,而數(shù)據(jù)的獲取的方式...
摘要:大奉打更人賣報(bào)小郎君這個(gè)人仙太過(guò)正經(jīng)言歸正傳從紅月開始黑山老鬼穩(wěn)住別浪跳舞二解析數(shù)據(jù)是一個(gè)可以從或文件中提取數(shù)據(jù)的庫(kù)。 目錄 一、XPath解析數(shù)據(jù) 1、XPath解析數(shù)據(jù) 2、XML的樹形結(jié)構(gòu) 3、使用XPath選取節(jié)點(diǎn) 4、課堂案例 - 爬取起點(diǎn)小說(shuō)網(wǎng) 二、BeautifulSoup解析...
摘要:不過(guò)不用擔(dān)心,中有很多非常優(yōu)秀的爬蟲框架,比如我們接下來(lái)要學(xué)習(xí)到的。結(jié)合以上分析我們基本確定了本次爬蟲的各個(gè)路線入口,接下來(lái)我們就開始通過(guò)程序來(lái)實(shí)現(xiàn)本次的目標(biāo)。這里我們的目的是建立一種寫爬蟲的思路,而不在于怎么使用工具來(lái)爬數(shù)據(jù)。 概述 在上一篇文章《爬蟲學(xué)習(xí)之一個(gè)簡(jiǎn)單的網(wǎng)絡(luò)爬蟲》中我們對(duì)爬蟲的概念有了一個(gè)初步的認(rèn)識(shí),并且通過(guò)Python的一些第三方庫(kù)很方便的提取了我們想要的內(nèi)容,但是...
閱讀 3524·2021-09-08 09:36
閱讀 2691·2019-08-30 15:54
閱讀 2412·2019-08-30 15:54
閱讀 1820·2019-08-30 15:44
閱讀 2446·2019-08-26 14:04
閱讀 2490·2019-08-26 14:01
閱讀 2934·2019-08-26 13:58
閱讀 1414·2019-08-26 13:47