zoukankan      html  css  js  c++  java
  • 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()'))
    ```
  • 相关阅读:
    java中的Iterator和Iterable 区别
    Ubuntu 12.04 部署 PostGIS 2.1
    postgres模板数据库
    在ubuntu 10.04 上QGIS的安装步骤
    js----解决异步之Generator && async
    js----promise.all() promise.race()
    js----异步之Promise,Generator,Async
    js----CSRF-跨站请求伪造攻击
    js----js实现继承的方式及其优缺点
    vue----nextTick获取最新dom结构
  • 原文地址:https://www.cnblogs.com/chaiming/p/7796631.html
Copyright © 2011-2022 走看看