一 遍歷
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...