python爬微信公眾號前10篇歷史文章(3)-lxml&xpath初探
-
理解lxml以及xpath
什麽是lxml?
python中用來處理XML和HTML的library。與其他相比,它能提供很好的性能, 並且它支持XPath。 具體可以查看官方文檔->http://lxml.de/index.html
- 結構化數據:
XML, JSON
- 非結構化數據:
HTML文本是最常見的數據格式,因為一般我們需要的關鍵信息並非直接可以得到,需要進行對HTML的解析查找,甚至一些字符串操作才能得到,所以歸類於非結構化的數據處理中。
常見解析方式如下: XPath、CSS選擇器、正則表達式
python lxml庫可以使用elements來創建XML/HTML結構, 也可以從XML/HTML結構中解析出想要的信息。
創建HTML結構
1. 導包, etree用來創建元素和結構
from lxml import etree
2. 使用 Element class API 來創建多個元素。元素也被稱作結點。
root = etree.Element(‘html‘)
3.XML/HTML結構遵循父親-兒子範例,一個結點可以是其他結點的父親或者兒子。在lxml中要創建這種關系可以使用etree模塊下的SubElement。
In [5]: etree.SubElement(root, ‘head‘) Out[5]: <Element head at 0x7f43a5c51e60> In [6]: etree.SubElement(root, ‘body‘) Out[6]: <Element body at 0x7f43a5c51f38> In [7]: print etree.tostring(root) <html><head/><body/></html>
4 每個結點有很多屬性
解析HTML結構
1 使用 lxml 的 etree 庫,然後利用 etree.HTML解析
In [19]: import requests In [20]: from lxml import etree In [21]: page = requests.get(‘http://www.cnn.com‘) In [22]: html_content = etree.html(page.text)
當我們獲得一個etree結構時,接下來需要用到XPath去定位信息。 它有特定的表達式去選擇結點或者一組特定結點。
XPath
XPath(XML Path Language)是XML路徑語言,它是一種用來定位XML文檔中某部分位置的語言。
表達式 | 描述 |
---|---|
/ | 從根節點選取。 |
nodename | 選取此節點的所有子節點。 |
// | 從當前節點 選擇 所有匹配文檔中的節點 |
. | 選取當前節點。 |
.. | 選取當前節點的父節點。 |
@ | 選取屬性。 |
-
每個結點類型是一種靈活的容器對象,用於在內存中存儲結構化數據。
每個結點對象都具有以下屬性:
1. tag:string對象,標簽,用於標識該元素表示哪種數據(即元素類型)。
2. attrib:dictionary對象,表示附有的屬性。
3. text:string對象,表示element的內容。
4. tail:string對象,表示element閉合之後的尾跡。
<tag attrib1=1>text</tag>tail
1 2 3 4
謂語條件(Predicates)
-
謂語用來查找某個特定的信息或者包含某個指定的值的節點。
-
所謂"謂語條件",就是對路徑表達式的附加條件
-
謂語是被嵌在方括號中,都寫在方括號"[]"中,表示對節點進行進一步的篩選。
python爬微信公眾號前10篇歷史文章(3)-lxml&xpath初探