Python技能共建】lxml 模塊 R2

      網(wǎng)友投稿 867 2022-05-30

      Python lxml 模塊

      lxml 庫是一款 Python 數(shù)據(jù)解析庫,參考重要文檔在 https://lxml.de/,項(xiàng)目開源地址在:https://github.com/lxml/lxml,在一頓檢索之后,發(fā)現(xiàn) lxml 沒有中文相關(guān)手冊(cè),不過好在英文文檔閱讀難度不大,我們可以直接進(jìn)行學(xué)習(xí)。

      怎么用

      lxml.etree

      縱覽之前的博客內(nèi)容,出場(chǎng)率最高的就是 lxml.etree ,其次就是 Element 對(duì)象,我們?cè)诮馕鰯?shù)據(jù)的時(shí)候,大量的代碼都是基于 Element 對(duì)象的 API 實(shí)現(xiàn)。

      在爬蟲代碼采集過程中,通過 etree.HTML 直接將字符串實(shí)例化為 element 對(duì)象。

      import requests from lxml import etree res = requests.get("http://www.jsons.cn/zt/") html = res.text root_element = etree.HTML(html) print(root_element) print(root_element.tag)

      上述代碼輸出內(nèi)容如下所示:

      html

      【Python技能樹共建】lxml 模塊 R2

      其中需要注意的是 Element 后面的 html,該字符串表示對(duì)象的標(biāo)簽名為 html,如果使用下述代碼:

      print(root_element[1])

      上述內(nèi)容得到的是 ,即 body 標(biāo)簽,同樣的操作可以使用子元素獲取。

      print("*"*100) for child in root_element: print(child.tag)

      上述代碼輸出的內(nèi)容為:

      head body

      該輸出表示在 html 標(biāo)簽中,只包含head 與 body 標(biāo)簽,實(shí)際情況也確實(shí)如此,為了驗(yàn)證,你可以在 循環(huán)中繼續(xù)嵌套一層。

      此時(shí)輸出的內(nèi)容就變得豐富了需求,如下圖所示:

      你也可以通過 etree.tostring(element對(duì)象) 直接將該對(duì)象轉(zhuǎn)換為字符串進(jìn)行輸出。

      for child in root_element: for item in child: print(item.tag) print(etree.tostring(item))

      XPath

      lxml 庫可以配合其他的解析引擎進(jìn)行工作,首次接觸的就是 XPath,關(guān)于 XPath 相關(guān)的知識(shí),我們后續(xù)博客會(huì)細(xì)化學(xué)習(xí),本節(jié)課依舊從 lxml 的角度出發(fā),為你介紹。

      在爬蟲代碼編寫中,直接使用 html.xpath("xpath表達(dá)式") 即可獲取目標(biāo)數(shù)據(jù),例如獲取網(wǎng)頁 title。

      print(root_element.xpath('//title'))

      獲取網(wǎng)頁所有文本:

      print(root_element.xpath('string()'))

      獲取到 element 對(duì)象之后,可調(diào)用 text 屬性,獲取對(duì)應(yīng)文本,在使用的時(shí)候,需要注意使用 XPath 獲取到的 element 對(duì)象,都是列表。

      title_element = root_element.xpath('//title') print(title_element[0].text)

      在 lxml 中,還內(nèi)置了一款 簡(jiǎn)單的類似 XPath 的路徑語言,稱為 ElementPath,例如查詢 title,需要從 head 開始檢索,否則返回 None。

      print(root_element[0].find("title"))

      官方提供的方法如下:

      iterfind(): 返回查找到的數(shù)據(jù),迭代器形式返回;

      findall(): 返回匹配到的列表;

      find(): 返回第一個(gè)匹配到的數(shù)據(jù);

      findtext(): 返回匹配到的文本數(shù)據(jù),第一個(gè)。

      lxml 擴(kuò)展知識(shí)

      lxml 除了可以配合 XPath 實(shí)現(xiàn)數(shù)據(jù)解析外,還可以與 cssselect ,BeautifulSoup,html5lib 配合使用,這部分在后續(xù)的案例中,將逐步進(jìn)行展開。

      lxml 在爬蟲領(lǐng)域,更多的是在提取數(shù)據(jù),因此較于該庫本身,掌握 XPath 等解析表達(dá)式的寫法更加重要。

      鑒于該庫手冊(cè)沒有被翻譯,后期可以嘗試將其翻譯為中文。

      HTML Python

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。

      上一篇:JavaScript 獲取鼠標(biāo)點(diǎn)擊坐標(biāo)五種方式及兼容性
      下一篇:使用tensorflow版本deepfm預(yù)置算法進(jìn)行訓(xùn)練
      相關(guān)文章
      亚洲∧v久久久无码精品| 亚洲Av综合色区无码专区桃色| 亚洲中文无码永久免| 国产AV无码专区亚洲AV蜜芽 | 亚洲免费网站在线观看| 国产精品亚洲精品久久精品| 亚洲熟女精品中文字幕| 亚洲熟妇AV一区二区三区浪潮| 久久精品国产99国产精品亚洲| 亚洲深深色噜噜狠狠爱网站| 亚洲美国产亚洲AV| 中文字幕亚洲综合久久2| 亚洲色图综合在线| 亚洲五月丁香综合视频| 亚洲人成电影青青在线播放| 精品亚洲成A人无码成A在线观看 | 亚洲精品理论电影在线观看 | 亚洲国产高清精品线久久| 亚洲AV一二三区成人影片| 亚洲AV成人一区二区三区AV| 亚洲AV无码精品无码麻豆| 亚洲av综合av一区| 亚洲午夜在线电影| 久久精品国产亚洲一区二区| 亚洲成av人在片观看| 国产亚洲精品国产福利在线观看 | 亚洲中文字幕无码亚洲成A人片| 亚洲精品人成网在线播放影院| 亚洲高清资源在线观看| 亚洲国产精品久久丫| 国产亚洲精品成人AA片| 亚洲av日韩精品久久久久久a| 色在线亚洲视频www| 亚洲精品乱码久久久久久蜜桃图片| 国产天堂亚洲精品| 久久久久亚洲AV综合波多野结衣| 性色av极品无码专区亚洲| 亚洲av午夜精品一区二区三区| 91麻豆精品国产自产在线观看亚洲| 国产精品亚洲综合| 在线日韩日本国产亚洲|