009 - 使用XPath解析網(wǎng)頁(yè)

XPath 是一門在 XML 文檔中查找信息的語(yǔ)言。XPath 可用來(lái)在 XML 文檔中對(duì)元素和屬性進(jìn)行遍歷。XPath 是 W3C XSLT 標(biāo)準(zhǔn)的主要元素,并且 XQuery 和 XPointer 都構(gòu)建于 XPath 表達(dá)之上。

XPath 使用路徑表達(dá)式在 XML 文檔中選取節(jié)點(diǎn)。節(jié)點(diǎn)是通過(guò)沿著路徑或者 step 來(lái)選取的。用 XPath 解析網(wǎng)頁(yè)的內(nèi)容,就是確定所取內(nèi)容的路徑,即從大范圍縮小到具體的位置。

表達(dá)式 描述
nodename 選取此節(jié)點(diǎn)的所有子節(jié)點(diǎn)
/ 從根節(jié)點(diǎn)選取。
// 從匹配選擇的當(dāng)前節(jié)點(diǎn)選擇文檔中的節(jié)點(diǎn),而不考慮它們的位置。(相對(duì)路徑)
. 選取當(dāng)前節(jié)點(diǎn)。
.. 選取當(dāng)前節(jié)點(diǎn)的父節(jié)點(diǎn)。
@ 選取屬性。

text() 提取文本內(nèi)容
@xxx 提取屬性內(nèi)容

找到XPath兩種方法,一種是手動(dòng)分析,需要對(duì)HTML結(jié)構(gòu)熟悉,了解標(biāo)簽嵌套層級(jí);另一種是Chrome 工具copy,同時(shí)要結(jié)合網(wǎng)頁(yè)標(biāo)簽的進(jìn)行校驗(yàn)。

還是以糗事百科段子笑話為例 http://www.qiushibaike.com/text/

拷貝出來(lái)的XPath內(nèi)容如下:

//*[@id="qiushi_tag_118963704"]/a/div/span/text()

注意,這里[@id="qiushi_tag_118963704"] 指的是div class="article block untagged mb15" ,是唯一的。如果想取出所有的位置的段子內(nèi)容,就不能做唯一限定。修改為:

//div[@class="article block untagged mb15"]/a/div/span/text()

網(wǎng)頁(yè)標(biāo)簽id是唯一的,class標(biāo)簽是同一類標(biāo)簽的樣式。使用標(biāo)簽屬性,方便我們?nèi)〕鐾活愋偷膬?nèi)容。

# coding=utf-8

import requests
from lxml import etree

html = requests.get('http://www.qiushibaike.com/text/').content

selector = etree.HTML(html)

content = selector.xpath('//div[@class="article block untagged mb15"]/a/div/span/text()')

for each in content:
    print each


PS 參見(jiàn)之前文章: 爬蟲搜索神器BeautifulSoup和XPath 的使用

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 20170531 這幾天重新拾起了爬蟲,算起來(lái)有將近5個(gè)月不碰python爬蟲了。 對(duì)照著網(wǎng)上的程序和自己以前寫的...
    八神蒼月閱讀 14,392評(píng)論 3 44
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,715評(píng)論 19 139
  • 世界總是運(yùn)行在可知的軌跡當(dāng)中,只等著我們?nèi)グl(fā)現(xiàn) jQuery事件 jQuery封裝了大量的javascript事件...
    李天火閱讀 275評(píng)論 0 0
  • 豆瓣年度評(píng)分最高影片—《摔跤吧爸爸》票房已經(jīng)突破10億。這是一部由真實(shí)故事改編的電影,它幽默、感人、勵(lì)志!電影表達(dá)...
    taiya1984閱讀 458評(píng)論 0 0
  • 就這樣你簡(jiǎn)單的向我走過(guò)來(lái)終於我明白了自己為何存在慢慢的我們都已經(jīng)離不開(kāi)了只為彼此的幸福努力生活著如果我說(shuō)愛(ài)你能否相...
    我是你的誰(shuí)閱讀 257評(píng)論 0 0

友情鏈接更多精彩內(nèi)容