問題描述:xpath獲取節點下的全部文本可經過「*//text()」實現,但若是想獲取節點下的內容---包括文本和標籤那就沒有直接的辦法。html
處理辦法:此時可以使用lxml.html.tostring()方法,將篩選出的標籤轉換爲字符串。python
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_2214094dom
問題描述:若是有多個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該如何寫呢。spa
處理辦法:這兩個div有共用的樣式common1,若是能經過「包含common1」的形式來篩選就能達到目的;可經過xpath的contains來實現這一效果。.net
dom.xpath("//div[contains(@class, 'card-header')]")
問題描述:python生成html時咱們可能會須要進行html實體轉義,而從html頁面獲取值時可能會須要將轉義還原。網上不少要麼只講反轉義,要麼比較舊有些庫都廢棄了。code
處理辦法:如今Python3能夠使用html.escape()和html.unescape(),很方便地實現html實體轉義和反轉義。xml
import html # 將字符串進行html實體轉義 str_need_escape = "<test>test</test>" str_escape = html.escape(str_need_escape) # 將已進行html實體轉義還原 str_need_unescape = "<test>test</test>" str_unescape = html.unescape(str_need_unescape)