Python3解析html高級操做

1、xpath相關

1.1 xpath獲取節點下的全部內容

問題描述: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

 

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該如何寫呢。spa

處理辦法:這兩個div有共用的樣式common1,若是能經過「包含common1」的形式來篩選就能達到目的;可經過xpath的contains來實現這一效果。.net

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

 

2、html實體轉義和反轉義

問題描述: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 = "&lt;test&gt;test&lt;/test&gt;"
str_unescape = html.unescape(str_need_unescape)

參考:http://www.javashuo.com/article/p-qbklyxuc-du.htmlhtm

相關文章
相關標籤/搜索