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()'))
```
posted @ 2017-11-07 02:41  cm_python_Detail  阅读(1454)  评论(0编辑  收藏  举报