• 简单举例

     from pyquery import PyQuery as pq
    
     html = '''
    <div>
    <ul>
    <li class="item-O"><a href="linkl.html">first item</a></li>
    <li class="item-1"><a href="link2.html">second item</a></li>
    <li class="item-inactive"><a href="link3.html">third item</a></li>
    <li class="item-1"><a href="link4.html">fourth item</a></li>
    <li class="item-0"><a href="link5.html">fifth item</a>
    </ul>
    </div>
    ''' doc = pq(html)
    print(doc) # 输出:
    <div>
    <ul>
    <li class="item-O"><a href="linkl.html">first item</a></li>
    <li class="item-1"><a href="link2.html">second item</a></li>
    <li class="item-inactive"><a href="link3.html">third item</a></li>
    <li class="item-1"><a href="link4.html">fourth item</a></li>
    <li class="item-0"><a href="link5.html">fifth item</a>
    </li></ul>
    </div>

    字符串

     from pyquery import PyQuery as pq
    import requests # doc1 与 doc2 功能相同
    doc1 = pq(url='https://www.cnblogs.com/liyihua/')
    print(doc1('title')) doc2 = pq(requests.get('https://www.cnblogs.com/liyihua/').text)
    print(doc1('title')) # 输出:
    <title>李亦华 - 博客园</title>&#13; <title>李亦华 - 博客园</title>&#13;

    URL

     from pyquery import PyQuery as pq
    
     doc = pq(filename='test.html')
    print(doc('li')) # 输出:
    <li class="item-O"><a href="linkl.html">first item</a></li>
    <li class="item-1"><a href="link2.html">second item</a></li>
    <li class="item-inactive"><a href="link3.html">third item</a></li>
    <li class="item-1"><a href="link4.html">fourth item</a></li>
    <li class="item-0"><a href="link5.html">fifth item</a>
    </li> # 文件内容:
    <div>
    <ul>
    <li class="item-O"><a href="linkl.html">first item</a></li>
    <li class="item-1"><a href="link2.html">second item</a></li>
    <li class="item-inactive"><a href="link3.html">third item</a></li>
    <li class="item-1"><a href="link4.html">fourth item</a></li>
    <li class="item-0"><a href="link5.html">fifth item</a>
    </ul>
    </div>

    文件

  • 基本CSS选择器

     from pyquery import PyQuery as pq
    
     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>
    ''' doc = pq(html)
    print(doc('#container .list li')) print(
    type(
    doc('#container .list li')
    )
    ) # 输出:
    <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> <class 'pyquery.pyquery.PyQuery'>
  • 查找节点

    •  from pyquery import PyQuery
      
       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>
      ''' doc = PyQuery(html)
      items = doc('.list') print(
      type(items),
      items,
      sep='\n'
      ) print(
      type(items.find('li')),
      items.find('li'),
      sep='\n'
      ) # 输出:
      <class 'pyquery.pyquery.PyQuery'>
      <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> <class 'pyquery.pyquery.PyQuery'>
      <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>

      子孙节点----find()方法

      # find()方法查找的是所有子孙节点,如果只查找子节点,可以使用children()方法

       from pyquery import PyQuery
      
       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>
      ''' doc = PyQuery(html)
      items = doc('.list') print(items, '\n') print(
      type(items.parent()),
      items.parent(),
      sep='\n'
      ) # 输出:
      <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> <class 'pyquery.pyquery.PyQuery'>
      <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>

      父节点----parent()方法

      parents(selector=None)
      parent(selector=None)
       from pyquery import PyQuery
      
       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>
      ''' doc = PyQuery(html) # 选择class为list的节点内部class为item-0和active的节点
      items = doc('.list .item-0.active') print(
      type(items.siblings()),
      items.siblings(),
      sep='\n'
      ) print("\n", items.siblings('.active')) # 输出:
      <class 'pyquery.pyquery.PyQuery'>
      <li class="item-1"><a href="link2.html">second item</a></li>
      <li class="item-0">first item</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> <li class="item-1 active"><a href="link4.html">fourth item</a></li>

      兄弟节点----siblings()方法


  • 遍历

     from pyquery import PyQuery
    
     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>
    ''' doc = PyQuery(html)
    lis = doc('li').items() # 调用items()方法,得到一个生成器 for li in lis:
    print(
    li,
    type(li)
    ) # 输出:
    <li class="item-0">first item</li>
    <class 'pyquery.pyquery.PyQuery'>
    <li class="item-1"><a href="link2.html">second item</a></li>
    <class 'pyquery.pyquery.PyQuery'>
    <li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>
    <class 'pyquery.pyquery.PyQuery'>
    <li class="item-1 active"><a href="link4.html">fourth item</a></li>
    <class 'pyquery.pyquery.PyQuery'>
    <li class="item-0"><a href="link5.html">fifth item</a></li>
    <class 'pyquery.pyquery.PyQuery'>

    遍历----items()

  • 获取信息

    • 获取属性

      attr()方法获取属性
       from pyquery import PyQuery
      
       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>
      ''' doc = PyQuery(html)
      a = doc('.item-0.active a')
      print(
      a,
      type(a),
      a.attr('href'), # 也可以用a.attr.href,两者作用相同
      sep='\n'
      ) # 输出:
      <a href="link3.html"><span class="bold">third item</span></a>
      <class 'pyquery.pyquery.PyQuery'>
      link3.html
      # 当返回结果包含多个节点时,调用attr()方法,只会得到第一个节点的属性。如果想获取所有返回的节点的属性,就要用到遍历了
    • 获取文本

       from pyquery import PyQuery
      
       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>
      ''' doc = PyQuery(html)
      li = doc('li') print(
      li.html(), # 获取节点的内部文本
      li.text(), # 获取节点文本,返回结果是纯文字内容
      type(li.text()),
      sep='\n'
      ) # 输出:
      first item
      first item second item third item fourth item fifth item
      <class 'str'>
  • 节点操作

    • add_class() 和 remove_class() ---- 添加class、移除class

       from pyquery import PyQuery
      
       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>
      ''' doc = PyQuery(html)
      li = doc('.item-0.active') print(li)
      print(li.remove_class('active'))
      print(li.add_class('active')) # 输出:
      <li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li> <li class="item-0"><a href="link3.html"><span class="bold">third item</span></a></li> <li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>
    • attr、text 和 html

      # attr(*args, **kwargs) ---- Attributes manipulation
      # text(value=no_default, **kwargs) ---- Get or set the text representation of sub nodes.
      # html(value=no_default, **kwargs) ---- Get or set the html representation of sub nodes.
       from pyquery import PyQuery
      
       html = '''
      <div id="container">
      <ul class="list">
      <li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>
      </ul>
      </div>
      ''' doc = PyQuery(html) li = doc('.item-0.active')
      print(li) li.attr('name', 'link') # 添加属性name,属性值为link
      print(li) li.text('change item') # 将节点内部的内容改为'change item'
      print(li) li.html('<span>change item</span>') # 将节点内部的内容改为'<span>change item</span>'
      print(li) # 输出:
      <li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li> <li class="item-0 active" name="link"><a href="link3.html"><span class="bold">third item</span></a></li> <li class="item-0 active" name="link">change item</li> <li class="item-0 active" name="link"><span>change item</span></li>
    • remove()----删除节点

       from pyquery import PyQuery
      
       html = '''
      <div class="LeeHua">
      LiYihua
      <ul class="201802004731">liyihua</ul>
      </div>
      ''' doc = PyQuery(html)
      Leehua = doc('.LeeHua')
      print("移除节点ul前的输出:\n"+Leehua.text()) Leehua.find('ul').remove()
      print("移除节点ul后的输出:\n"+Leehua.text()) # 输出:
      移除节点ul前的输出:
      LiYihua
      liyihua
      移除节点ul后的输出:
      LiYihua
  • 伪类选择器

    • 示例:

       from pyquery import PyQuery
      
       html = '''
      <div class="wrap">
      <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>
      ''' doc = PyQuery(html) # 选择属于父元素的第一个子元素的每个 <li> 元素。
      li = doc('li:first-child')
      print(li) # 选择属于父元素的最后一个子元素的每个 <li> 元素。
      li = doc('li:last-child')
      print(li) # 选择属于其父元素的第二个子元素的每个 <li> 元素
      li = doc('li:nth-child(2)')
      print(li) # 选择属于其父元素的最后两个子元素的每个 <li> 元素
      li = doc('li:gt(2)')
      print(li) # 选择属于父元素的第偶个子元素的每个 <li> 元素。
      li = doc('li:nth-child(2n)')
      print(li) # 选择包含'second'的每个元素
      li = doc('li:contains(second)')
      print(li) # 输出:
      <li class="item-0">first item</li> <li class="item-0"><a href="link5.html">fifth item</a></li> <li class="item-1"><a href="link2.html">second item</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> <li class="item-1"><a href="link2.html">second item</a></li>
      <li class="item-1 active"><a href="link4.html">fourth item</a></li> <li class="item-1"><a href="link2.html">second item</a></li>

      CSS 选择器的用法:http://www.w3school.com.cn/cssref/css_selectors.asp

使用pyquery的更多相关文章

  1. pyquery的问题

    在使用pyquery时发现一些问题, 1.爬取的html中如果有较多的错误时,不能很好的补全. 2.如果要获取某个class中的内容时,如果内容太多不能取完整!只能取一部分. 这个在现在的最新版本中还 ...

  2. python爬虫神器PyQuery的使用方法

    你是否觉得 XPath 的用法多少有点晦涩难记呢? 你是否觉得 BeautifulSoup 的语法多少有些悭吝难懂呢? 你是否甚至还在苦苦研究正则表达式却因为少些了一个点而抓狂呢? 你是否已经有了一些 ...

  3. windows下python安装pyquery

    安装pyquery之前首先要明确一点,easyinstall 是一款python包管理器,类似于node的npm,用于安装python的扩展包,它安装的包是以*.egg的方式. 要安装pq需要经历以下 ...

  4. Python开发包推荐系列之xml、html解析器PyQuery

    使用python,喜欢她的简洁是一方面,另外就是它有着丰富的开发包 好用又方便 接下来会给大家推荐一系列很赞的开发包. 在解析html.xml过程中,我们有不少的包可以用.比如bs.lxml.xmlt ...

  5. python - PyQuery

    偶尔的机会,知道这么个扩展,手贱翻了下文档,发现似乎挺有意思,遂记录一二. what: 这是一个python版本的jquery,而且是后端执行的,至少官方是这么说的: pyquery allows y ...

  6. 【pyQuery】抓取startup news首页

    #! /usr/bin/python # coding: utf-8 from pyquery import PyQuery c=PyQuery('http://news.dbanotes.net/' ...

  7. 【pyQuery分析实例】分析体育网冠军联盟比赛成绩

    目标地址:http://www.espncricinfo.com/champions-league-twenty20-2012/engine/match/574265.html liz@nb-liz: ...

  8. 【PyQuery】PyQuery总结

    pyquery库是jQuery的Python实现,可以用于解析HTML网页内容, 官方文档地址是:http://packages.python.org/pyquery/. 二.使用方法 ? 1 fro ...

  9. win7下python安装pyquery

    安装pyquery之前首先要明确一点,easyinstall 是一款python包管理器,类似于node的npm,用于安装python的扩展包,它安装的包是以*.egg的方式. 要安装pq需要经历以下 ...

  10. Python抓取页面中超链接(URL)的三中方法比较(HTMLParser、pyquery、正则表达式) <转>

    Python抓取页面中超链接(URL)的3中方法比较(HTMLParser.pyquery.正则表达式) HTMLParser版: #!/usr/bin/python # -*- coding: UT ...

随机推荐

  1. ArchLinux安(重)装指南

    说实话,我其实是不想要出这篇博客的.在我这一个月安装Arch的过程中,让我感触比较深的一点是: 没有谁比这个系统的官方更懂它. 尤其是这种比较复杂的系统,更是如此. 这几天,我经历了一次重装,系统坏了 ...

  2. 判断日期是否为法定节假日的API接口与示例函数

    需要判定某日期是否为法定节假日,由于国家的节假日每年都在变动,所以使用接口判定是必要的.可惜的是,这样的接口并不多,在此汇总三个: http://tool.bitefu.net/jiari/ http ...

  3. ['1', '2', '3'].map(parseInt) what & why ?

    这是今天在 Advanced-Frontend组织 看到一个比较有意思的题目.主要是讲JS的映射与解析早在 2013年, 加里·伯恩哈德就在微博上发布了以下代码段: ['10','10','10',' ...

  4. HTML基础知识(块级标签,行内标签,行内块标签)

    块级元素:独占一行,对宽高的属性值生效:如果不给宽度,块级元素就默认为浏览器的宽度,即就是100%宽: 行内元素:可以多个标签存在一行,对宽高属性值不生效,完全靠内容撑开宽高! 其中还有一种结合两种模 ...

  5. 31、vue-cli3引入封装svg图标

    svg图标放大不失真,png会出现失真现象. 一.方法一 1.在对应vue项目里添加插件 vue add svg-sprite 输入 Y 2.在执行 npm install svgo svgo-loa ...

  6. SDN网络IPv6组播机制支持实时视频业务海量用户扩展

    以 OpenFlow 技术为核心的软件定义网络(SDN)框架具有集中控制的功能能够自己感知网络拓扑的变化,在细粒度的路径选择.接入控制.负载均衡方面有着天然的优势,为 IPv6 组播功能的实现提供了好 ...

  7. 浅谈分布式事务与TX-LCN

    最近做项目使用到了分布式事务,下面这篇文章将给大家介绍一下对分布式事务的一些见解,并讲解分布式事务处理框架TX-LCN的执行原理,初学入门,错误之处望各位不吝指正. 什么情况下需要使用分布式事务? 使 ...

  8. python编程基础之三十

    时间模块: 时间戳:就是当前是键距离1970年1月1日0:0:0的秒数,后面还带小数,可以说是非常精确 时间的表示形式: a.以整数或者浮点数表示一个以秒为单位的时间间隔,这个时间的基础值1970.1 ...

  9. Mysql存储引擎以及锁机制

    一.常用命令 1.查看引擎(默认为InnoDB) 查看mysql提供的存储引擎:show engienes 查看mysql当前默认的存储引擎:show variables like '%storage ...

  10. Vue-CLI项目vuex仓库

    0901自我总结 Vue-CLI项目vuex仓库 一.概念 vuex仓库是vue全局的数据仓库,好比一个单例,在任何组件中通过this.$store来共享这个仓库中的数据,完成跨组件间的信息交互. v ...