lxml的安裝
使用pip安裝
pip install lxml
關於lxml
lxml使用的是Xpath語法,而且使用的是C語言編寫,比不使用lxml解析器的BeautifulSoup快一些。
Xpath是一門在XML文檔中查找信息的語言。Xpath使用路徑表達式來選取XML文檔中的節點或節點集,也可以用在HTML獲取數據中。
import requests
from lxml import etree
link = "http://www.santostang.com/"
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) \
AppleWebKit/537.36 (KHTML, like Gecko) \
Chrome/70.0.3538.25 \
Safari/537.36 Core/1.70.3741.400 QQBrowser/10.5.3863.400 ',
'Host': 'www.santostang.com'
}
r = requests.get(link, headers=headers)
html = etree.HTML(r.text) #解析爲lxml格式
title_list = html.xpath('//h1[@class="post-title"]/a/text()')
print(title_list)
和BeautifulSoup類似,使用lxml的時候需要先用html=etree.HTML(r.text)解析爲lxml格式,然後用Xpath讀取裏面的內容。
其中,"//h1"
表示選取所有<h1>
子元素,"//"
無論文檔在什麼位置,後面加上[@class="post-title"]
表示選取<h1>
中class爲"post-title"
的元素,/a
表示選取<h1>
子元素的<a>
元素,text()
表示提取<a>
元素中的所有文本。
我們可以使用瀏覽器的“檢查”方法快速獲得一個元素的Xpath:
選中一個元素——>右鍵——>Copy——>Copy Xpath
表達式
| 描述
|
---|---|
nodename
| 選取此節點的所有子節點。
|
/
| 從根節點選取。
|
//
| 從匹配選擇的當前節點選擇文檔中的節點,而不考慮它們的位置。
|
.
| 選取當前節點。
|
..
| 選取當前節點的父節點。
|
@
| 選取屬性。
|
下面是一個XML文檔:
<bookstore>
<book>
<title>HarryPotter</title>
<author>JK.Rowling</author>
<year>2005</year>
<price>29.99</price>
</book>
</bookstore>
路徑表達式
| 結果
|
---|---|
bookstore
| 選取 bookstore 元素的所有子節點。
|
/bookstore
| 選取根元素 bookstore。
註釋:假如路徑起始於正斜槓( / ),則此路徑始終代表到某元素的絕對路徑!
|
bookstore/book
| 選取屬於 bookstore 的子元素的所有 book 元素。
|
//book
| 選取所有 book 子元素,而不管它們在文檔中的位置。
|
bookstore//book
| 選擇屬於 bookstore 元素的後代的所有 book 元素,而不管它們位於 bookstore 之下的什麼位置。
|
//@lang
| 選取名爲 lang 的所有屬性。
|