PyQuery库是一个非常强大的网页解析库,如果你有前端开发经验的,都应该接触过jQuery,那么PyQuery就是你非常绝佳的选择,PyQuery 是 Python 仿照 jQuery 的严格实现。它的语法与 jQuery 几乎完全相同,所以不用再去费心记一些奇怪的方法了。
官网地址:http://pyquery.readthedocs.io/en/latest/
jQuery参考文档: http://jquery.cuishifeng.cn/

1、字符串的初始化

from pyquery import PyQuery as pq

html = '''<div>
<ul>
<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)
print(type(doc))
print(doc('li'))

2、打开html文件

注意路径问题

from pyquery import PyQuery as pq
doc = pq(filename='index.html')
print(doc)
print(doc('head'))

3、打开某个网站

doc = pq('https://www.baidu.com')
# doc1 = pq(url='https://www.baidu.com')
print(doc)
print(doc('head'))
  

4、基于CSS选择器查找

from pyquery import PyQuery as pq

html = '''<div>
<ul id = 'haha'>
<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)
#id等于haha下面的class等于item-0下的a标签下的span标签(注意层级关系以空格隔开)
print(doc('#haha .item-0 a span'))

5、可以通过已经查找到的标签,查找这个标签下的子标签或者父标签,而不用从头开始查找。

from pyquery import PyQuery as pq

html = '''<div class=‘content’>
<ul id = 'haha'>
<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)
item = doc('div ul')
print(item)
#我们可以通过已经查找到的标签,再次查找这个标签下面的标签
print(item.parent())
print(item.children())

----------------------------------------------------------------

from pyquery import PyQuery as pq

html = '''<div class=‘content’>
<ul id = 'haha'>
<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)
item = doc('div ul')
print(item)
#注意这里查找ul标签的所有子标签,也就是li标签,下面是查找class属性的标签,如果你把class换成href肯定不行,它指的只是儿子并不是子子孙孙
print(item.children('[class]'))

6、获取属性值

from pyquery import PyQuery as pq

html = '''<div class=‘content’>
<ul id = 'haha'>
<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)
#注意class=item-0 active是一个class的属性,但是在pyquery里面要是中间也是空格隔开的话,
#就变成了item-0下的active标签下的a标签了,所以这里空格必须改成点
item = doc(".item-0.active a")
print(type(item))
print(item)
#获取属性值的两种方法
print(item.attr.href)
print(item.attr('href'))

7、获取标签的内容

from pyquery import PyQuery as pq

html = '''<div class=‘content’>
<ul id = 'haha'>
<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)
a = doc("a").text()
print(a)

8、Dom操作

  1、属性的增加删除操作

  from pyquery import PyQuery as pq

  html = '''<div class=‘content’>
  <ul id = 'haha'>
  <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)
  li = doc('.item-0.active')
  print(li)
  #删除classactive
  print(li.removeClass('active'))
  #增加class属性haha
  print(li.addClass('haha'))

  2、attrs和css

  注意:下列操作有则改之,无则加之。

  from pyquery import PyQuery as pq

  html = '''<div class=‘content’>
  <ul id = 'haha'>
  <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)
  li = doc('.item-0.active')
  print(li)
  print(li.attr('id','id_test'))
  print(li.css('font-size','20px'))

  3、删除某个标签,在爬取过程中我们通常抓取到的内容总会有一些不想要的标签,这个时候我们可以用以下类似的方法来删除这些标签。

  from pyquery import PyQuery as pq

  html = '''<div class='content'>
  <ul id = 'haha'>
  <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)
  data = doc('.content')
  print(data.text())
  #删除所有a标签
  data.find('a').remove()
  #再次打印
  print(data.text())

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. ibatiS启动的异常 The content of elements must consist of well-formed character data or markup

    ibatiS启动的异常 The content of elements must consist of well-formed character data or markup 配置的动态SQL语句里 ...

  2. css样式表格边框1px hover时为2px 实现方式

    //css .flclass-cont .flclass-cont-box{width:%;display:inline-block;font-size:;margin:10px;position:r ...

  3. Generic programming-泛型编程

    Generic programming is a style of computer programming in which algorithms are written in terms of t ...

  4. 路飞学城Python-Day36

    24-记录的增删改查 1. 插入完整数据(顺序插入) 语法一: INSERT INTO 表名(字段1,字段2,字段3…字段n) VALUES(值1,值2,值3…值n);   语法二: INSERT I ...

  5. Pyhton学习——Day5

    # s=set('hello')# print(s)## s=set(['alex','alex','sb'])# print(s) # s={1,2,3,4,5,6} #添加# s.add('s') ...

  6. Pyhton学习——Day29

    #异常与错误# 什么是异常?# 异常就是程序运行时发生错误的信号,在程序出现错误时,则会产生异常,若没有程序处理,则会抛出异常# 导致程序在异常语句处崩溃终止# Traceback 追踪异常信号:** ...

  7. u-boot启动代码start.S详解

    (1)定义入口.由于一个可执行的Image必须有一个入口点,并且只能有一个全局入口,通常这个入口放在ROM(Flash)的0x0地址,因此,必须通知编译器以使其知道这个入口,该工作可通过修改连接器脚本 ...

  8. linux上重启jboss服务器

    ps -ef|grep jboss  :查看当前jboss进程 kill -9 进程id         :杀掉进程,kill -9发送的信号是SIGKILL,即exit.exit信号不会被系统阻塞 ...

  9. 《你又怎么了我错了行了吧》【Beta】Scrum meeting 1

    第一天 日期:2019/6/24 前言: 第1次会议在女生宿舍召开 对前面的开发成果进行验收和测试,继续完善项目 1.1 今日完成任务情况以及明日任务安排 姓名 当前阶段任务 下一阶段任务 刘 佳 对 ...

  10. spring mvc过滤器filter

    SpringMVC 过滤器Filter使用解析 1.如上所示的spring-web.jar包结构所示, Spring的web包中中提供有很多过滤器,这些过滤器位于org.springframework ...