爬蟲pyquery中級篇

2021-09-09 00:21:22 字數 4523 閱讀 4941

一 遍歷

1 點睛

pyquery的選擇結果可能是多個節點,也可能是單個節點,型別都是pyquery型別,並沒有返回像beautiful soup那樣的列表。

2 單節點

2.1 **

html = '''

'''from pyquery import pyquery as pq

doc = pq(html)

li = doc('.item-0.active')

# 可以直接列印輸出,也可以直接轉成字串

print(li)

print(str(li))

2.2 結果

e:\webspider\venv\scripts\python.exe e:/webspider/4_3.py

third item

third item

3 多節點

3.1 **

html = '''

'''# from pyquery import pyquery as pq

# doc = pq(html)

# li = doc('.item-0.active')

# # 可以直接列印輸出,也可以直接轉成字串

# print(li)

# print(str(li))

from pyquery import pyquery as pq

doc = pq(html)

# 對於多個節點的結果,我們就需要遍歷來獲取了。

lis = doc('li').items()

print(type(lis))

# 這裡把每乙個li節點進行遍歷,需要呼叫items()方法

for li in lis:

print(li, type(li))

3.2 結果

e:\webspider\venv\scripts\python.exe e:/webspider/4_3.py

first item

second item

third item

fourth item

fifth item

3.3 說明

可以發現,呼叫items()方法後,會得到乙個生成器,遍歷一下,就可以逐個得到li節點物件了,它的型別也是pyquery型別。每個li節點還可以呼叫前面所說的方法進行選擇,比如繼續查詢子節點,尋找某個祖先節點等,非常靈活。

二 獲取屬性

1 **

html = '''

'''from pyquery import pyquery as pq

doc = pq(html)

a = doc('.item-0.active a')

print(a, type(a))

# 呼叫attr()方法來獲取屬性

print(a.attr('href'))

# 呼叫attr屬性來獲取屬性

print(a.attr.href)

2 結果

e:\webspider\venv\scripts\python.exe e:/webspider/4_3.py

third item

link3.html

link3.html

3 說明

這裡首先選中class為item-0和active的li節點內的a節點,它的型別是pyquery型別。

然後呼叫attr()方法。在這個方法中傳入屬性的名稱,就可以得到這個屬性值了。

三 多個元素獲取屬性——錯誤方法

1 **

html = '''

'''from pyquery import pyquery as pq

doc = pq(html)

a = doc('a')

print(a, type(a))

print(a.attr('href'))

print(a.attr.href)

2 結果

e:\webspider\venv\scripts\python.exe e:/webspider/4_3.py

second item

third item

fourth item

fifth item

link2.html

link2.html

3 說明

照理來說,我們選中的a節點應該有4個,而且列印結果也應該是4個,但是當我們呼叫attr()方法時,返回結果卻只是第乙個。這是因為,當返回結果包含多個節點時,呼叫attr()方法,只會得到第乙個節點的屬性。

四 多個元素獲取屬性——正確方法

1 **

html = '''

'''from pyquery import pyquery as pq

doc = pq(html)

a = doc('a')

for item in a.items():

print(item.attr('href'))

2 結果

e:\webspider\venv\scripts\python.exe e:/webspider/4_3.py

link2.html

link3.html

link4.html

link5.html

3 說明

因此,在進行屬性獲取時,可以觀察返回節點是乙個還是多個,如果是多個,則需要遍歷才能依次獲取每個節點的屬性。

五 獲取文字text方法

1 點睛

獲取節點之後的另乙個主要操作就是獲取其內部的文字了,此時可以呼叫text()方法來實現。

2 **

html = '''

'''from pyquery import pyquery as pq

doc = pq(html)

a = doc('.item-0.active a')

print(a)

print(a.text())

3 結果

e:\webspider\venv\scripts\python.exe e:/webspider/4_3.py

third item

third item

4 說明

這裡首先選中乙個a節點,然後呼叫text()方法,就可以獲取其內部的文字資訊。此時它會忽略掉節點內部包含的所有html,只返回純文字內容。

六 獲取文字html方法

1 **

html = '''

'''from pyquery import pyquery as pq

doc = pq(html)

li = doc('.item-0.active')

print(li)

# 想要獲取這個節點內部的html文字,就要用html()方法

print(li.html())

2 結果

e:\webspider\venv\scripts\python.exe e:/webspider/4_3.py

third item

third item

3 說明

選中了第三個li節點,然後呼叫了html()方法,它返回的結果應該是li節點內的所有html文字。

七 返回多個節點時text()和html()對比

1 **

html = '''

'''from pyquery import pyquery as pq

doc = pq(html)

li = doc('li')

print(li.html())

print(li.text())

print(type(li.text()))

2 結果

e:\webspider\venv\scripts\python.exe e:/webspider/4_3.py

second item

second item third item fourth item fifth item

3 說明

結果可能比較出乎意料,html()方法返回的是第乙個li節點的內部html文字,而text()則返回了所有的li節點內部的純文字,中間用乙個空格分割開,即返回結果是乙個字串。

所以這個地方值得注意,如果得到的結果是多個節點,並且想要獲取每個節點的內部html文字,則需要遍歷每個節點。而text()方法不需要遍歷就可以獲取,它將所有節點取文字之後合併成乙個字串。

爬蟲pyquery基礎篇

一 點睛 如果你對web有所涉及,如果你比較喜歡用css選擇器,如果你對jquery有所了解,那麼這裡有乙個更適合你的解析庫 pyquery。二 安裝 venv e webspider pip install pyquery三 初始化 1 點睛 pyquery初始化方式有多種,比如直接傳入字串,傳入...

爬蟲入門之pyQuery

pyquery庫是 jquery 的 python 實現,能夠以jquery的語法來操作解析 html 文件,易用性和解析速度都很好 安裝 pip3 install pyquery注意 由於 pyquery 依賴於 lxml 要先安裝 lxml 否則會提示失敗。pip3 install lxmlpy...

爬蟲筆記 PyQuery模組(七)

pyquery模組也是乙個解析html的乙個模組,它和beautiful soup用起來差不多,它是jquery實現的,和jquery語法差不多,會用jquery的人用起來就比較方便了。pyquery需要依賴lxml模組,不裝的話,使用會報錯。安裝 pip install lxml pip inst...