使用lxml解析網頁

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 的所有屬性。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章