python中的爬蟲神器 XPath 介紹

2021-07-31 15:34:25 字數 3156 閱讀 8452

注意:在使用xpath解析資料時,需要將資料**改為是ie瀏覽器的user-agent,否則會出現瀏覽器中可行的xpath**,但是在程式中卻用不了

這裡提供ie9的header

mozilla/5.0 (compatible; msie 9.0; windows nt 6.1; win64; x64; trident/5.0)

xpath即為xml路徑語言,它是一種用來確定xml(標準通用標記語言的子集)文件中某部分位置的語言。xpath基於xml的樹狀結構,提供在資料結構樹中找尋節點的能力。 xpath 同樣也支援html.

xpath 是一門小型的查詢語言,這裡我們將它與 python 爬蟲相結合來介紹。

step1: 安裝 lxml 庫。

step2: from lxml import etree

step3: selector = etree.html(網頁源**)

step4: selector.xpath(一段神奇的符號)

xpath 使用路徑表示式來選取 xml 文件中的節點或節點集。節點是通過沿著路徑 (path) 或者步 (steps) 來選取的。

xpath 使用路徑表示式在 xml 文件中選取節點。節點是通過沿著路徑或者 step 來選取的。

假設有如下的文件:

<?xml version="1.0" encoding="iso-8859-1"

?>

<

bookstore

>

<

book

>

<

title

lang

="eng"

>

harry potter

title

>

<

price

>

29.99

price

>

book

>

<

book

>

<

title

lang

="eng"

>

learning xml

title

>

<

price

>

39.95

price

>

book

>

bookstore

>

下面列出了最有用的路徑表示式:

表示式描述

nodename

選取此節點的所有子節點

/從根節點擊取

//從匹配選擇的當前節點擊擇文件中的節點,而不考慮它們的位置

.選取當前節點

..選取當前節點的父節點

@選取屬性

在下面的**中,我們已列出了一些路徑表示式以及表示式的結果:

路徑表示式

結果bookstore

選取 bookstore 元素的所有子節點

/bookstore

選取根元素 bookstore。 

注釋:假如路徑起始於正斜槓( / ),則此路徑始終代表到某元素的絕對路徑!

bookstore/book

選取屬於 bookstore 的子元素的所有 book 元素

//book

選取所有 book 子元素,而不管它們在文件中的位置

bookstore//book

選擇屬於 bookstore 元素的後代的所有 book 元素,而不管它們位於 bookstore 之下的什麼位置

//@lang

選取名為 lang 的所有屬性

鑑於篇幅的,只列出了 xpath 的部分語法,更多例項,可以參考 w3chool 的資料

假設有如下 html 原始碼:

<

divid

="content"

>

<

ulid

="useful"

>

<

li>

有效資訊1

li>

<

li>

有效資訊2

li>

<

li>

有效資訊3

li>

ul>

<

ulid

="useless"

>

<

li>

無效資訊1

li>

<

li>

無效資訊2

li>

<

li>

無效資訊3

li>

ul>

div>

<

divid

="url"

>

<

ahref

="">

陳浩的部落格

a>

<

ahref

=".photo"

title

="陳浩的相簿"

>

點我開啟

a>

div>

我們假設把上面的原始碼已經賦值給了字串變數html:

from lxml import

etree

# 假設已經存在 html 變數,值為上面的原始碼

selector = etree.html(html)

# 提取 li 中的有效資訊123

content = selector.xpath('//ul[

@id=

"useful"

]/li/text()')

for each

in content:

print

(each

)#提取 a 中的屬性

link = selector.xpath('//a/

@href

')for

each

in link:

print

(each

)title = selector.xpath('//a/

@title

')for

each

in title:

print

(each

)

python爬蟲基礎04 網頁解析庫xpath

xpath 是一門在 xml 文件中查詢資訊的語言。xpath 用於在 xml 文件中通過元素和屬性進行導航。相比於beautifulsoup,xpath在提取資料時會更加的方便。在python中很多庫都有提供xpath的功能,但是最基本的還是lxml這個庫,效率最高。在之前beautifulsou...

爬蟲神器xpath的用法(二)

爬取網頁內容的時候,往往網頁標籤比較複雜,對於這種情況,需要用xpath的starts with和string 功能屬性來處理,具體看事例 encoding utf 8 from lxml import etree html1 需要的內容1 需要的內容2 需要的內容3 提取id屬性為test開頭的的...

python 爬蟲中的extract

ul class list li 123 li li abc li ul 1xx.xpath ul class list li xx是html文件 xpath解析返回乙個解析器列表 2 xx.xpath ul class list li extract output 123 abc extract使...