亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

【Python3網(wǎng)絡(luò)爬蟲開發(fā)實(shí)戰(zhàn)】4.3-使用pyquery

系統(tǒng) 2064 0

【摘要】 如果你對(duì)Web有所涉及,如果你比較喜歡用CSS選擇器,如果你對(duì)jQuery有所了解,那么這里有一個(gè)更適合你的解析庫——pyquery。接下來,我們就來感受一下pyquery的強(qiáng)大之處。

在上一節(jié)中,我們介紹了Beautiful Soup的用法,它是一個(gè)非常強(qiáng)大的網(wǎng)頁解析庫,你是否覺得它的一些方法用起來有點(diǎn)不適應(yīng)?有沒有覺得它的CSS選擇器的功能沒有那么強(qiáng)大?

如果你對(duì)Web有所涉及,如果你比較喜歡用CSS選擇器,如果你對(duì)jQuery有所了解,那么這里有一個(gè)更適合你的解析庫——pyquery。

接下來,我們就來感受一下pyquery的強(qiáng)大之處。

1. 準(zhǔn)備工作

在開始之前,請(qǐng)確保已經(jīng)正確安裝好了pyquery。若沒有安裝,可以參考第1章的安裝過程。

2. 初始化

像Beautiful Soup一樣,初始化pyquery的時(shí)候,也需要傳入HTML文本來初始化一個(gè)PyQuery對(duì)象。它的初始化方式有多種,比如直接傳入字符串,傳入U(xiǎn)RL,傳入文件名,等等。下面我們來詳細(xì)介紹一下。

字符串初始化

首先,我們用一個(gè)實(shí)例來感受一下:

            
              html = '''

              
              
'''
from pyquery import PyQuery as pq
doc = pq(html)
print(doc('li'))
            
          

運(yùn)行結(jié)果如下:

            
              
  • first item
  • second item
  • third item
  • fourth item
  • fifth item
  • 這里首先引入PyQuery這個(gè)對(duì)象,取別名為pq。然后聲明了一個(gè)長(zhǎng)HTML字符串,并將其當(dāng)作參數(shù)傳遞給PyQuery類,這樣就成功完成了初始化。接下來,將初始化的對(duì)象傳入CSS選擇器。在這個(gè)實(shí)例中,我們傳入li節(jié)點(diǎn),這樣就可以選擇所有的li節(jié)點(diǎn)。

    URL初始化

    初始化的參數(shù)不僅可以以字符串的形式傳遞,還可以傳入網(wǎng)頁的URL,此時(shí)只需要指定參數(shù)為url即可:

                
                  from pyquery import PyQuery as pq
    doc = pq(url='http://cuiqingcai.com')
    print(doc('title'))
                
              

    運(yùn)行結(jié)果如下:

                
              

    這樣的話,PyQuery對(duì)象會(huì)首先請(qǐng)求這個(gè)URL,然后用得到的HTML內(nèi)容完成初始化,這其實(shí)就相當(dāng)于用網(wǎng)頁的源代碼以字符串的形式傳遞給PyQuery類來初始化。

    它與下面的功能是相同的:

                
                  from pyquery import PyQuery as pq
    import requests
    doc = pq(requests.get('http://cuiqingcai.com').text)
    print(doc('title'))
                
              

    文件初始化

    當(dāng)然,除了傳遞URL,還可以傳遞本地的文件名,此時(shí)將參數(shù)指定為filename即可:

                
                  from pyquery import PyQuery as pq
    doc = pq(filename='demo.html')
    print(doc('li'))
                
              

    當(dāng)然,這里需要有一個(gè)本地HTML文件demo.html,其內(nèi)容是待解析的HTML字符串。這樣它會(huì)首先讀取本地的文件內(nèi)容,然后用文件內(nèi)容以字符串的形式傳遞給PyQuery類來初始化。

    以上3種初始化方式均可,當(dāng)然最常用的初始化方式還是以字符串形式傳遞。

    3. 基本CSS選擇器

    首先,用一個(gè)實(shí)例來感受pyquery的CSS選擇器的用法:

                
                  html = '''
    
                  
                  
    '''
    from pyquery import PyQuery as pq
    doc = pq(html)
    print(doc('#container .list li'))
    print(type(doc('#container .list li')))
                
              

    運(yùn)行結(jié)果如下:

                
                  
  • first item
  • second item
  • third item
  • fourth item
  • fifth item
  • 這里我們初始化PyQuery對(duì)象之后,傳入了一個(gè)CSS選擇器#container .list li,它的意思是先選取id為container的節(jié)點(diǎn),然后再選取其內(nèi)部的class為list的節(jié)點(diǎn)內(nèi)部的所有l(wèi)i節(jié)點(diǎn)。然后,打印輸出。可以看到,我們成功獲取到了符合條件的節(jié)點(diǎn)。

    最后,將它的類型打印輸出。可以看到,它的類型依然是PyQuery類型。

    4. 查找節(jié)點(diǎn)

    下面我們介紹一些常用的查詢函數(shù),這些函數(shù)和jQuery中函數(shù)的用法完全相同。

    子節(jié)點(diǎn)

    查找子節(jié)點(diǎn)時(shí),需要用到find()方法,此時(shí)傳入的參數(shù)是CSS選擇器。這里還是以前面的HTML為例:

                
                  from pyquery import PyQuery as pq
    doc = pq(html)
    items = doc('.list')
    print(type(items))
    print(items)
    lis = items.find('li')
    print(type(lis))
    print(lis)
                
              

    運(yùn)行結(jié)果如下:

                
                  
                    
                    
                      
  • first item
  • second item
  • third item
  • fourth item
  • fifth item
  • 首先,我們選取class為list的節(jié)點(diǎn),然后調(diào)用了find()方法,傳入CSS選擇器,選取其內(nèi)部的li節(jié)點(diǎn),最后打印輸出。可以發(fā)現(xiàn),find()方法會(huì)將符合條件的所有節(jié)點(diǎn)選擇出來,結(jié)果的類型是PyQuery類型。

    其實(shí)find()的查找范圍是節(jié)點(diǎn)的所有子孫節(jié)點(diǎn),而如果我們只想查找子節(jié)點(diǎn),那么可以用children()方法:

                
                  lis = items.children()
    print(type(lis))
    print(lis)
    運(yùn)行結(jié)果如下:
    
                  
                    
  • first item
  • second item
  • third item
  • fourth item
  • fifth item
  • 如果要篩選所有子節(jié)點(diǎn)中符合條件的節(jié)點(diǎn),比如想篩選出子節(jié)點(diǎn)中class為active的節(jié)點(diǎn),可以向children()方法傳入CSS選擇器.active:

                
                  lis = items.children('.active')
    print(lis)
                
              

    運(yùn)行結(jié)果如下:

                
                  
  • third item
  • fourth item
  • 可以看到,輸出結(jié)果已經(jīng)做了篩選,留下了class為active的節(jié)點(diǎn)。

    父節(jié)點(diǎn)

    我們可以用parent()方法來獲取某個(gè)節(jié)點(diǎn)的父節(jié)點(diǎn),示例如下:

                
                  html = '''
    
                  
                  
    '''
    from pyquery import PyQuery as pq
    doc = pq(html)
    items = doc('.list')
    container = items.parent()
    print(type(container))
    print(container)
                
              
                運(yùn)行結(jié)果如下:
              
                
                  
                    
                  
                
              

    這里我們首先用.list選取class為list的節(jié)點(diǎn),然后調(diào)用parent()方法得到其父節(jié)點(diǎn),其類型依然是PyQuery類型。

    這里的父節(jié)點(diǎn)是該節(jié)點(diǎn)的直接父節(jié)點(diǎn),也就是說,它不會(huì)再去查找父節(jié)點(diǎn)的父節(jié)點(diǎn),即祖先節(jié)點(diǎn)。

    但是如果想獲取某個(gè)祖先節(jié)點(diǎn),該怎么辦呢?這時(shí)可以用parents()方法:

                
                  from pyquery import PyQuery as pq
    doc = pq(html)
    items = doc('.list')
    parents = items.parents()
    print(type(parents))
    print(parents)
                
              

    運(yùn)行結(jié)果如下:

                
                  
                    
                    
                  
                
              

    可以看到,輸出結(jié)果有兩個(gè):一個(gè)是class為wrap的節(jié)點(diǎn),一個(gè)是id為container的節(jié)點(diǎn)。也就是說,parents()方法會(huì)返回所有的祖先節(jié)點(diǎn)。

    如果想要篩選某個(gè)祖先節(jié)點(diǎn)的話,可以向parents()方法傳入CSS選擇器,這樣就會(huì)返回祖先節(jié)點(diǎn)中符合CSS選擇器的節(jié)點(diǎn):

                
                  parent = items.parents('.wrap')
    print(parent)
                
              

    運(yùn)行結(jié)果如下:

                
                  
                
              

    可以看到,輸出結(jié)果少了一個(gè)節(jié)點(diǎn),只保留了class為wrap的節(jié)點(diǎn)。

    兄弟節(jié)點(diǎn)

    前面我們說明了子節(jié)點(diǎn)和父節(jié)點(diǎn)的用法,還有一種節(jié)點(diǎn),那就是兄弟節(jié)點(diǎn)。如果要獲取兄弟節(jié)點(diǎn),可以使用siblings()方法。這里還是以上面的HTML代碼為例:

                
                  from pyquery import PyQuery as pq
    doc = pq(html)
    li = doc('.list .item-0.active')
    print(li.siblings())
                
              

    這里首先選擇class為list的節(jié)點(diǎn)內(nèi)部class為item-0和active的節(jié)點(diǎn),也就是第三個(gè)li節(jié)點(diǎn)。那么,很明顯,它的兄弟節(jié)點(diǎn)有4個(gè),那就是第一、二、四、五個(gè)li節(jié)點(diǎn)。

    運(yùn)行結(jié)果如下:

                
                  
  • second item
  • first item
  • fourth item
  • fifth item
  • 可以看到,這正是我們剛才所說的4個(gè)兄弟節(jié)點(diǎn)。

    如果要篩選某個(gè)兄弟節(jié)點(diǎn),我們依然可以向siblings方法傳入CSS選擇器,這樣就會(huì)從所有兄弟節(jié)點(diǎn)中挑選出符合條件的節(jié)點(diǎn)了:

                
                  from pyquery import PyQuery as pq
    doc = pq(html)
    li = doc('.list .item-0.active')
    print(li.siblings('.active'))
                
              

    這里我們篩選了class為active的節(jié)點(diǎn),通過剛才的結(jié)果可以觀察到,class為active的兄弟節(jié)點(diǎn)只有第四個(gè)li節(jié)點(diǎn),所以結(jié)果應(yīng)該是一個(gè)。

    我們?cè)倏匆幌逻\(yùn)行結(jié)果:

  • fourth item
  • 5. 遍歷

    剛才可以觀察到,pyquery的選擇結(jié)果可能是多個(gè)節(jié)點(diǎn),也可能是單個(gè)節(jié)點(diǎn),類型都是PyQuery類型,并沒有返回像Beautiful Soup那樣的列表。

    對(duì)于單個(gè)節(jié)點(diǎn)來說,可以直接打印輸出,也可以直接轉(zhuǎn)成字符串:

                
                  from pyquery import PyQuery as pq
    doc = pq(html)
    li = doc('.item-0.active')
    print(li)
    print(str(li))
                
              

    運(yùn)行結(jié)果如下:

                
                  
  • third item
  • third item
  • 對(duì)于多個(gè)節(jié)點(diǎn)的結(jié)果,我們就需要遍歷來獲取了。例如,這里把每一個(gè)li節(jié)點(diǎn)進(jìn)行遍歷,需要調(diào)用items()方法:

                
                  from pyquery import PyQuery as pq
    doc = pq(html)
    lis = doc('li').items()
    print(type(lis))
    for li in lis:
        print(li, type(li))
                
              

    運(yùn)行結(jié)果如下:

                
                  
                    
  • first item
  • second item
  • third item
  • fourth item
  • fifth item
  • 可以發(fā)現(xiàn),調(diào)用items()方法后,會(huì)得到一個(gè)生成器,遍歷一下,就可以逐個(gè)得到li節(jié)點(diǎn)對(duì)象了,它的類型也是PyQuery類型。每個(gè)li節(jié)點(diǎn)還可以調(diào)用前面所說的方法進(jìn)行選擇,比如繼續(xù)查詢子節(jié)點(diǎn),尋找某個(gè)祖先節(jié)點(diǎn)等,非常靈活。

    6. 獲取信息

    提取到節(jié)點(diǎn)之后,我們的最終目的當(dāng)然是提取節(jié)點(diǎn)所包含的信息了。比較重要的信息有兩類,一是獲取屬性,二是獲取文本,下面分別進(jìn)行說明。

    獲取屬性

    提取到某個(gè)PyQuery類型的節(jié)點(diǎn)后,就可以調(diào)用attr()方法來獲取屬性:

                
                  html = '''
    
                  
                  
    '''
    from pyquery import PyQuery as pq
    doc = pq(html)
    a = doc('.item-0.active a')
    print(a, type(a))
    print(a.attr('href'))
                
              

    運(yùn)行結(jié)果如下:

                
                  
                    
                      third item
                    
                  
                  
                    
    link3.html
                  
                
              

    這里首先選中class為item-0和active的li節(jié)點(diǎn)內(nèi)的a節(jié)點(diǎn),它的類型是PyQuery類型。

    然后調(diào)用attr()方法。在這個(gè)方法中傳入屬性的名稱,就可以得到這個(gè)屬性值了。

    此外,也可以通過調(diào)用attr屬性來獲取屬性,用法如下:

                
                  print(a.attr.href)
                
              

    結(jié)果如下:

                
                  link3.html
                
              

    這兩種方法的結(jié)果完全一樣。

    如果選中的是多個(gè)元素,然后調(diào)用attr()方法,會(huì)出現(xiàn)怎樣的結(jié)果呢?我們用實(shí)例來測(cè)試一下:

                
                  a = doc('a')
    print(a, type(a))
    print(a.attr('href'))
    print(a.attr.href)
                
              

    運(yùn)行結(jié)果如下:

                
                  
                    second item
                  
                  
                    
                      third item
                    
                  
                  
                    fourth item
                  
                  
                    fifth item
                  
                  
                    
    link2.html
    link2.html
                  
                
              

    照理來說,我們選中的a節(jié)點(diǎn)應(yīng)該有4個(gè),而且打印結(jié)果也應(yīng)該是4個(gè),但是當(dāng)我們調(diào)用attr()方法時(shí),返回結(jié)果卻只是第一個(gè)。這是因?yàn)椋?dāng)返回結(jié)果包含多個(gè)節(jié)點(diǎn)時(shí),調(diào)用attr()方法,只會(huì)得到第一個(gè)節(jié)點(diǎn)的屬性。

    那么,遇到這種情況時(shí),如果想獲取所有的a節(jié)點(diǎn)的屬性,就要用到前面所說的遍歷了:

                
                  from pyquery import PyQuery as pq
    doc = pq(html)
    a = doc('a')
    for item in a.items():
        print(item.attr('href'))
                
              

    此時(shí)的運(yùn)行結(jié)果如下:

                
                  link2.html
    link3.html
    link4.html
    link5.html
                
              

    因此,在進(jìn)行屬性獲取時(shí),可以觀察返回節(jié)點(diǎn)是一個(gè)還是多個(gè),如果是多個(gè),則需要遍歷才能依次獲取每個(gè)節(jié)點(diǎn)的屬性。

    獲取文本

    獲取節(jié)點(diǎn)之后的另一個(gè)主要操作就是獲取其內(nèi)部的文本了,此時(shí)可以調(diào)用text()方法來實(shí)現(xiàn):

                
                  html = '''
    
                  
                  
    '''
    from pyquery import PyQuery as pq
    doc = pq(html)
    a = doc('.item-0.active a')
    print(a)
    print(a.text())
                
              

    運(yùn)行結(jié)果如下:

                
                  
                    
                      third item
                    
                  
                  
    third item
                
              

    這里首先選中一個(gè)a節(jié)點(diǎn),然后調(diào)用text()方法,就可以獲取其內(nèi)部的文本信息。此時(shí)它會(huì)忽略掉節(jié)點(diǎn)內(nèi)部包含的所有HTML,只返回純文字內(nèi)容。

    但如果想要獲取這個(gè)節(jié)點(diǎn)內(nèi)部的HTML文本,就要用html()方法了:

                
                  from pyquery import PyQuery as pq
    doc = pq(html)
    li = doc('.item-0.active')
    print(li)
    print(li.html())
                
              

    這里我們選中了第三個(gè)li節(jié)點(diǎn),然后調(diào)用了html()方法,它返回的結(jié)果應(yīng)該是li節(jié)點(diǎn)內(nèi)的所有HTML文本。

    運(yùn)行結(jié)果如下:

                
                  
                    
                      third item
                    
                  
                
              

    這里同樣有一個(gè)問題,如果我們選中的結(jié)果是多個(gè)節(jié)點(diǎn),text()或html()會(huì)返回什么內(nèi)容?我們用實(shí)例來看一下:

                
                  html = '''
    
                  
                  
    '''
    from pyquery import PyQuery as pq
    doc = pq(html)
    li = doc('li')
    print(li.html())
    print(li.text())
    print(type(li.text())
                
              

    運(yùn)行結(jié)果如下:

                
                  
                    second item
                  
                  
    second item third item fourth item fifth item
    
                  
                
              

    結(jié)果可能比較出乎意料,html()方法返回的是第一個(gè)li節(jié)點(diǎn)的內(nèi)部HTML文本,而text()則返回了所有的li節(jié)點(diǎn)內(nèi)部的純文本,中間用一個(gè)空格分割開,即返回結(jié)果是一個(gè)字符串。

    所以這個(gè)地方值得注意,如果得到的結(jié)果是多個(gè)節(jié)點(diǎn),并且想要獲取每個(gè)節(jié)點(diǎn)的內(nèi)部HTML文本,則需要遍歷每個(gè)節(jié)點(diǎn)。而text()方法不需要遍歷就可以獲取,它將所有節(jié)點(diǎn)取文本之后合并成一個(gè)字符串。

    7. 節(jié)點(diǎn)操作

    pyquery提供了一系列方法來對(duì)節(jié)點(diǎn)進(jìn)行動(dòng)態(tài)修改,比如為某個(gè)節(jié)點(diǎn)添加一個(gè)class,移除某個(gè)節(jié)點(diǎn)等,這些操作有時(shí)候會(huì)為提取信息帶來極大的便利。

    由于節(jié)點(diǎn)操作的方法太多,下面舉幾個(gè)典型的例子來說明它的用法。

    addClass和removeClass

    我們先用實(shí)例來感受一下:

                
                  html = '''
    
                  
                  
    '''
    from pyquery import PyQuery as pq
    doc = pq(html)
    li = doc('.item-0.active')
    print(li)
    li.removeClass('active')
    print(li)
    li.addClass('active')
    print(li)
                
              

    首先選中了第三個(gè)li節(jié)點(diǎn),然后調(diào)用removeClass()方法,將li節(jié)點(diǎn)的active這個(gè)class移除,后來又調(diào)用addClass()方法,將class添加回來。每執(zhí)行一次操作,就打印輸出當(dāng)前l(fā)i節(jié)點(diǎn)的內(nèi)容。

    運(yùn)行結(jié)果如下:

                
                  
  • third item
  • third item
  • third item
  • 可以看到,一共輸出了3次。第二次輸出時(shí),li節(jié)點(diǎn)的active這個(gè)class被移除了,第三次class又添加回來了。

    所以說,addClass()和removeClass()這些方法可以動(dòng)態(tài)改變節(jié)點(diǎn)的class屬性。

    attr、text和html

    當(dāng)然,除了操作class這個(gè)屬性外,也可以用attr()方法對(duì)屬性進(jìn)行操作。此外,還可以用text()和html()方法來改變節(jié)點(diǎn)內(nèi)部的內(nèi)容。示例如下:

                
                  html = '''
    
                  
                  
    '''
    from pyquery import PyQuery as pq
    doc = pq(html)
    li = doc('.item-0.active')
    print(li)
    li.attr('name', 'link')
    print(li)
    li.text('changed item')
    print(li)
    li.html('
                  
                    changed item
                  
                  ')
    print(li)
                
              

    這里我們首先選中l(wèi)i節(jié)點(diǎn),然后調(diào)用attr()方法來修改屬性,其中該方法的第一個(gè)參數(shù)為屬性名,第二個(gè)參數(shù)為屬性值。接著,調(diào)用text()和html()方法來改變節(jié)點(diǎn)內(nèi)部的內(nèi)容。三次操作后,分別打印輸出當(dāng)前的li節(jié)點(diǎn)。

    運(yùn)行結(jié)果如下:

                
                  
  • third item
  • third item
  • changed item
  • changed item
  • 可以發(fā)現(xiàn),調(diào)用attr()方法后,li節(jié)點(diǎn)多了一個(gè)原本不存在的屬性name,其值為link。接著調(diào)用text()方法,傳入文本之后,li節(jié)點(diǎn)內(nèi)部的文本全被改為傳入的字符串文本了。最后,調(diào)用html()方法傳入HTML文本后,li節(jié)點(diǎn)內(nèi)部又變?yōu)閭魅氲腍TML文本了。

    所以說,如果attr()方法只傳入第一個(gè)參數(shù)的屬性名,則是獲取這個(gè)屬性值;如果傳入第二個(gè)參數(shù),可以用來修改屬性值。text()和html()方法如果不傳參數(shù),則是獲取節(jié)點(diǎn)內(nèi)純文本和HTML文本;如果傳入?yún)?shù),則進(jìn)行賦值。

    remove()

    顧名思義,remove()方法就是移除,它有時(shí)會(huì)為信息的提取帶來非常大的便利。下面有一段HTML文本:

                
                  html = '''
    
                  
    Hello, World

    This is a paragraph.

    ''' from pyquery import PyQuery as pq doc = pq(html) wrap = doc('.wrap') print(wrap.text())

    現(xiàn)在想提取Hello, World這個(gè)字符串,而不要p節(jié)點(diǎn)內(nèi)部的字符串,需要怎樣操作呢?

    這里直接先嘗試提取class為wrap的節(jié)點(diǎn)的內(nèi)容,看看是不是我們想要的。運(yùn)行結(jié)果如下:

                
                  Hello, World This is a paragraph.
                
              

    這個(gè)結(jié)果還包含了內(nèi)部的p節(jié)點(diǎn)的內(nèi)容,也就是說text()把所有的純文本全提取出來了。如果我們想去掉p節(jié)點(diǎn)內(nèi)部的文本,可以選擇再把p節(jié)點(diǎn)內(nèi)的文本提取一遍,然后從整個(gè)結(jié)果中移除這個(gè)子串,但這個(gè)做法明顯比較煩瑣。

    這時(shí)remove()方法就可以派上用場(chǎng)了,我們可以接著這么做:

                
                  wrap.find('p').remove()
    print(wrap.text())
                
              

    首先選中p節(jié)點(diǎn),然后調(diào)用了remove()方法將其移除,然后這時(shí)wrap內(nèi)部就只剩下Hello, World這句話了,然后再利用text()方法提取即可。

    另外,其實(shí)還有很多節(jié)點(diǎn)操作的方法,比如append()、empty()和prepend()等方法,它們和jQuery的用法完全一致,詳細(xì)的用法可以參考官方文檔:http://pyquery.readthedocs.io/en/latest/api.html。

    8. 偽類選擇器

    CSS選擇器之所以強(qiáng)大,還有一個(gè)很重要的原因,那就是它支持多種多樣的偽類選擇器,例如選擇第一個(gè)節(jié)點(diǎn)、最后一個(gè)節(jié)點(diǎn)、奇偶數(shù)節(jié)點(diǎn)、包含某一文本的節(jié)點(diǎn)等。示例如下:

                
                  html = '''
    
                  
                  
    '''
    from pyquery import PyQuery as pq
    doc = pq(html)
    li = doc('li:first-child')
    print(li)
    li = doc('li:last-child')
    print(li)
    li = doc('li:nth-child(2)')
    print(li)
    li = doc('li:gt(2)')
    print(li)
    li = doc('li:nth-child(2n)')
    print(li)
                  
                    
                      
    li 
                    
                    
                      =
                    
                    
                       doc
                    
                    
                      (
                    
                    
                      'li:contains(second)'
                    
                    
                      )
                    
                    
                      print
                    
                    
                      (
                    
                    
                      li
                    
                    
                      )
                    
                  
                
              

    這里我們使用了CSS3的偽類選擇器,依次選擇了第一個(gè)li節(jié)點(diǎn)、最后一個(gè)li節(jié)點(diǎn)、第二個(gè)li節(jié)點(diǎn)、第三個(gè)li之后的li節(jié)點(diǎn)、偶數(shù)位置的li節(jié)點(diǎn)、包含second文本的li節(jié)點(diǎn)。

    關(guān)于CSS選擇器的更多用法,可以參考http://www.w3school.com.cn/css/index.asp。

    到此為止,pyquery的常用用法就介紹完了。如果想查看更多的內(nèi)容,可以參考pyquery的官方文檔:http://pyquery.readthedocs.io。我們相信有了它,解析網(wǎng)頁不再是難事。

    來源:華為云社區(qū) ?作者:崔慶才丨靜覓


    更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

    微信掃碼或搜索:z360901061

    微信掃一掃加我為好友

    QQ號(hào)聯(lián)系: 360901061

    您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

    【本文對(duì)您有幫助就好】

    您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

    發(fā)表我的評(píng)論
    最新評(píng)論 總共0條評(píng)論
    主站蜘蛛池模板: 亚洲视频在线观看视频 | 国产第一色 | 精品日韩一区二区 | 国产精品手机在线观看 | 欧美日韩看片 | 91久久亚洲精品国产一区二区 | 狠狠狠很橹影院 | 久草经典视频 | 日本不卡一区二区三区 最新 | 国产在线观看中文字幕 | 人成在线免费视频 | 日韩一区二区三区在线观看 | 99久久精品国产一区二区成人 | 国产精品爱久久久久久久小 | 九九热视| 99久久国产综合精品女小说 | 2021国产精品自产拍在线观看 | 日本高清不卡免费 | 九九热免费在线观看 | 国产大战女模特在线视频 | 国产在线91区精品 | 亚洲欧美一区二区三区在饯 | 4虎最新 | 国产高清狼人香蕉在线观看 | 毛片在线看网站 | 欧美精品亚洲精品日韩 | 欧美一区二区三区精品国产 | 国产精品视频一区国模私拍 | 99视频在线看观免费 | 亚洲国产精品久久久久666 | 天天干天天操天天爽 | 又粗又大的机巴好爽欧美 | 玖玖精品在线 | 久久蝌蚪| 亚洲综合网站久久久 | 亚洲欧美高清视频 | 欧美一级在线免费观看 | 91视频网址入口 | 久久伊人亚洲 | 欧美ucjizz免费播放器 | 狠狠久久久久久亚洲综合网 |