Python3解析html高級操作


一、xpath相關

1.1 xpath獲取節點下的所有內容

問題描述:xpath獲取節點下的所有文本可通過“*//text()”實現,但如果想獲取節點下的內容---包括文本和標簽那就沒有直接的辦法。

處理辦法:此時可使用lxml.html.tostring()方法,將篩選出的標簽轉換為字符串。

import lxml
# 沒有下邊這句直接使用lxml.html會報錯lxml沒有html,不懂什么道理
from lxml import html

# xpath出來的是列表,lxml.html.tostring只能接收具體的一個標簽所以要有[0]
target_lable = dom.xpath("//div[@id='target_lable_id']")[0]
# all_text_in_target_label = target_label.xpath("*//text()")
everything_in_target_label = lxml.html.tostring(target_lable)

參考:https://www.oschina.net/question/2806953_2214094

 

1.2 xpath獲取包含某種樣式的節點

問題描述:如果有多個div節點都為<div class="common1"></div>,想要獲取所有這些div節點我們可以通過dom.xpath("//div[@class='common1']")來獲取。但如果有的div為<div class="common1 special1"></div>有的div為<div class="common1 special2"></div>,此時想要獲取所有這些div節點我們xpath該如何寫呢。

處理辦法:這兩個div有共用的樣式common1,如果能通過“包含common1”的形式來篩選就能達到目的;可通過xpath的contains來實現這一效果。

dom.xpath("//div[contains(@class, 'card-header')]")

 

二、html實體轉義和反轉義

問題描述:python生成html時我們可能會需要進行html實體轉義,而從html頁面獲取值時可能會需要將轉義還原。網上很多要么只講反轉義,要么比較舊有些庫都廢棄了。

處理辦法:現在Python3可以使用html.escape()和html.unescape(),很方便地實現html實體轉義和反轉義。

import html

# 將字符串進行html實體轉義
str_need_escape = "<test>test</test>"
str_escape = html.escape(str_need_escape)

# 將已進行html實體轉義還原
str_need_unescape = "&lt;test&gt;test&lt;/test&gt;"
str_unescape = html.unescape(str_need_unescape)

參考:https://www.cnblogs.com/kungfupanda/p/4313903.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM