pyquery和etree兩個模塊的區別


etree模塊可以用xpath方法提出網頁數據,而pyquery模塊常用css方法來提取

  • pyquery

      from pyquery import PyQuery as pq
      import requests
    
      response = requests.get('http://www.baidu.com')
      html_str = response.content.decode()
    
      # 構造PyQuery實例,類型為:pyquery.pyquery.PyQuery
      doc = pq(html_str)
      doc('td.id')
    

    doc('td.ip') 為pyquery.pyquery.PyQuery類型,根據標簽td ,類名為ip選擇到的標簽

  • 這種類型有幾種常用方法

    • .find() : -- 根據標簽名稱尋找,返回pyquery.pyquery.PyQuery類型--
    • remove() : --刪除對應標簽--
    • items() : --返回一組生成器,為pyquery.pyquery.PyQuery類型,如果直接遍歷得到的是element類型,這時就要用到這個方法--
    • text() : --返回文本--

    remove()方法可以去掉網頁的一些雜質

        doc('td.ip').find('p').remove()   # p標簽直接刪除掉了,doc('td.id')里邊已經沒有p標簽了
        doc('td.ip').find('p')
        [out]:  []   # 標簽為空
·        # 然后我們就能得到相應的數據:
        for td in doc('td.ip').items:
            td.text().replace(' ', '' )
  • etree

etree.Element() 生成一個element元素,這個元素具有xpath方法,可以用路徑搜索元素

-詳細內容參見:http://www.cnblogs.com/pangblog/p/3275738.html 
###假設xml是獲取的網頁元素,要去除掉 <td class="ip">下邊的p標簽,不能用可pyquery一樣的方法,**要用父類元素移除**。
        p_list = xml.xpath('//td[@class="ip"]//p]')
        for p in p_list:
            p.getparent().remove(p)  # 有父類元素來移除

補充

11/20日,發現直接移除也是有方法的,用drop_tree()

  • 獲取文本
    • text() : 獲取單個文本,每個子元素的文本放一個列表里邊
    • string() : 獲取所有文本
        for ip in xml.xpath('//td[@class="ip"]'):
            # 打印所有文本內容
            print(ip.xpath('string()'))
```


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM