xpath是一門在xml文件中查詢資訊的語言。xpath可以用來在xml文件中對元素和屬性進行遍歷。
在xpath中,有7中型別的節點,元素,屬性,文字,命名空間,處理指令,注釋及根節點。
節點
首先看下面例子:
<?xml version="上面的節點例子:1.0" encoding="
iso-8859-1
"?>"en
">harry potter
j k. rowling
2005
29.99
(文件節點)父:在上面的例子裡,book是title,author,year,price的父。j k. rowling
(元素節點)
lang="
en" (屬性節點)
子:反過來,title,author,year,price是book的子。
同胞:title,author,year,price是同胞。
先輩:title的先輩是book,bookstore。
後代:bookstore的後代是book,tite,author,year,price。
再看乙個例子:
<?xml version="如何選取節點呢?1.0" encoding="
iso-8859-1
"?>
"eng
">harry potter
29.99
"eng
">learning xml
39.95
xpath 使用路徑表示式在 xml 文件中選取節點。節點是通過沿著路徑或者 step 來選取的。
對應上面的例子,得到結果:
謂語:謂語用來查詢某個特定節點或者包含某個指定值的節點。
比如:選取未知節點:
比如:選取若干路徑:通過在路徑表示式中使用「|」運算子,您可以選取若干個路徑。
常用xpath屬性:
#在python中應用將html文件或者xml文件轉換成乙個etree物件,然後呼叫物件中的方法查詢指定節點。找到class屬性為song的div標籤
//div[@class="
song"]
層級定位:
#找到class屬性為tang的div直系字標籤ul下的第二個字標籤li下的直系字標籤a
//div[@class='
tang
']/ul/li[2]/a
邏輯運算:
找到class屬性為空且href屬性為tang的a標籤
//a[@class=''
and @href='
tang']
模糊定位
#查詢class屬性值裡包含'ng'字串的div標籤
//div[contains(@class, 'ng'
)]
#配配class屬性以ta為開頭的div標籤
//div[start_with(@class, 'ta'
)]獲取文字
//div[@class="
song
"]/p[1]/text()
獲取屬性
#獲取class屬性為tang的div下的第二個li下面a標籤的href屬性
//div[@class="
tang
"]//li[2]/a/@href
1 本地檔案:
tree = etree.parse(文件)
tree.xpath(xpath表示式)
2 網路資料:
tree = etree.html(網頁字串)
tree.xpath(xpath表示式)
importrequests
from lxml import
etree
import
random
defmain():
#網頁url
url = '
'ua_headers =
#網頁**
response = requests.get(url=url, headers=ua_headers).text
#轉換為etree物件
tree =etree.html(response)
#匹配到所有class屬性為thumb的div標籤下的img標籤的src屬性值,返回乙個列表
#將儲存到本地
python爬蟲 資料解析
解析的區域性的文字內容都會在標籤之間或者標籤對應的屬性中進行儲存 使用正規表示式,利用字串匹配篩選出所需要的內容 例 ex re是python中使用正規表示式的庫 page text是爬取到頁面的原始碼 使用上面定義的正則匹配規則進行解析,得到的url img src list re.findall...
Python爬蟲之資料解析和提取
獲取資料之後需要對資料進行解析和提取,需要用到的庫是beautifulsoup,需要在終端安裝 pip install beautifulsoup4 1 解析資料 bs物件 beautifulsoup 要解析的文字 解析器 解析器我們一般用python的內建庫 html.parser 示例 impo...
Python爬蟲之Xpath解析
例項化乙個etree物件,且需要將被解析的頁面的原始碼資料載入到該物件中 呼叫etree物件中的xpath方法結合著xpath表示式實現標籤的定位和內容的捕獲 pip install lxmlfrom lxml import etree1 將本地的html檔案中的原始碼載入到etree物件中 etr...