pyquery的基本使用

朗朗上口就行啦發表於2020-09-29

1、初始化

字串初始化

doc = pq(html)

檔案初始化

doc = pq(filename='demo.html')
#但是需要修改pyquery的原始碼
if 'filename' in kwargs:
    #html = open(kwargs['filename'])
    html = open(kwargs['filename'], "r", encoding="utf-8")

URL初始化

doc = pq(url='http://cuiqingcai.com')
#等同於
doc = pq(requests.get('http://cuiqingcai.com').text)

 2、查詢

全篇以此文件為模板

html = '''
<div id="container">
    <ul class="list">
         <li class="item-0">first item</li>
         <li class="item-1"><a href="link2.html">second item</a></li>
         <li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>
         <li class="item-1 active"><a href="link4.html">fourth item</a></li>
         <li class="item-0"><a href="link5.html">fifth item</a></li>
     </ul>
 </div>
 <div class="s-main-slot s-result-list s-search-results sg-row">
    <div data-asin="" data-index="0" data-uuid="123" data-component-type="" class="list1">
         <li class="item-10">first item</li>
         <li class="item-11"><a href="link2.html">second item</a></li>
         <li class="item-10 active"><a href="link3.html"><span class="bold">third item</span></a></li>
         <li class="item-11 active"><a href="link4.html">fourth item</a></li>
         <li class="item-10"><a href="link5.html">fifth item</a></li>
     </ul>
 </div>
'''

class=""前面加. id前面加# 標籤前面不用加例如 li ul,同一個class的屬性追加.

以單個class的單一屬性做為篩選條件

doc = pq(html)
main_list = doc('.s-main-slot').items()
count = 0
for ml in main_list:
    print(ml)

以單個class的多屬性做為篩選條件

main_list = doc('.s-main-slot.s-result-list2.s-search-results').items()
for ml in main_list:
    print(ml)

以多個class的多屬性做為篩選條件

main_list = doc('.s-main-slot.s-result-list2.s-search-results .list2').items()

class和id和標籤一起做為篩選條件

main_list = doc('#container .list  li').items()

找到符合篩選條件的子節點

#所有子孫節點
items = doc('.list')
lis = items.find('li')
#子節點
lis = items.children()
print(lis)
#需要使用子節點的話
lis = items.children().items()

找到符合篩選條件的父節點

#直接父節點
items = doc('.list')
container = items.parent()
#祖先節點
items = doc('.list')
parents = items.parents()

找到符合節點的兄弟節點

li = doc('.list .item-0.active')
print(li.siblings())
#新增篩選條件
print(li.siblings('.active'))

遍歷

lis = doc('li').items()
for li in lis:
    print(li, type(li))

獲取資訊

a = doc('.item-0.active a')
print(a, type(a))
print(a.attr('href'))
#print(a.attr.href)
#當多節點時,需要遍歷讀取
for item in a.items():
    print(item.attr('href'))

獲取文字

text()則返回了所有的li節點內部的純文字,中間用一個空格分割開,即返回結果是一個字串。

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

獲取HTML文字

html()方法返回的是第一個li節點的內部HTML文字,如果得到的結果是多個節點,並且想要獲取每個節點的內部HTML文字,則需要遍歷每個節點

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

節點操作

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

attr,text,html

attr()方法只傳入第一個引數的屬性名,則是獲取這個屬性值;如果傳入第二個引數,可以用來修改屬性值。text()和html()方法如果不傳引數,則是獲取節點內純文字和HTML文字;如果傳入引數,則進行賦值。

text()方法,傳入文字之後,li節點內部的文字全被改為傳入的字串文字了

html()方法傳入HTML文字後,li節點內部又變為傳入的HTML文字了。

li.attr('name', 'link')
li.text('changed item')
li.html('<span>changed item</span>')

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

相關文章