介绍

pyquery库是jQueryPython实现,可以用于解析HTML网页内容,官方文档地址是:http://packages.python.org/pyquery/

  pyquery 可让你用 jQuery 的语法来对 xml 进行操作。这I和 jQuery 十分类似。如果利用 lxml,pyquery 对 xml 和 html 的处理将更快。

  这个库不是(至少还不是)一个可以和 JavaScript交互的代码库,它只是非常像 jQuery API 而已。

安装

  pip install pyquery

或下载安装:https://pypi.python.org/pypi/pyquery/#downloads

初始化

  引入库:from pyquery import PyQuery as pq

  1、直接字符串

  doc = pq("<html></html>")   pq 参数可以直接传入 HTML 代码,doc 现在就相当于 jQuery 里面的 $ 符号了

  2、lxml.etree

  doc = pq(etree.fromstring("<html></html>"))

  可以首先用 lxml 的 etree 处理一下代码,这样如果你的 HTML 代码出现一些不完整或者疏漏,都会自动转化为完整清晰结构的 HTML代码。

  3、直接传URL

  doc = pq('http://www.baidu.com')

  这里就像直接请求了一个网页一样,类似用 urllib2 来直接请求这个链接,得到 HTML 代码

  4、传文件

  doc = pq(filename='hello.html')

  可以直接传某个路径的文件名。

快速体验

  现在我们以本地文件为例,传入一个名字为 hello.html 的文件,文件内容为:  

  

  

  运行结果:

  

  在这里我们注意到了一点,PyQuery 初始化之后,返回类型是 PyQuery,利用了选择器筛选一次之后,返回结果的类型依然还是 PyQuery,这简直和 jQuery 如出一辙,不能更赞!

  然而想一下 BeautifulSoup 和 XPath 返回的是什么?列表!一种不能再进行二次筛选(在这里指依然利用 BeautifulSoup 或者 XPath 语法)的对象!

属性操作

  你可以完全按照 jQuery 的语法来进行 PyQuery 的操作

  

  运行结果

  

  

DOM操作

  

遍历

  

网页请求

  

pyquery – PyQuery complete API

  https://pythonhosted.org/pyquery/api.html

1.可加载一段HTML字符串,或一个HTML文件,或是一个url地址,

  d=pq("<html><title>hello</title></html>")

  d=pq(filename=path_to_html_file)

  d=pq(url='http://www.baidu.com')注意:此处url似乎必须写全

2.html()和text() ——获取相应的HTML块或文本块,

  p=pq("<head><title>hello</title></head>")

  p('head').html()#返回<title>hello</title>

  p('head').text()#返回hello

3.根据HTML标签来获取元素,

  d=pq('<div><p>test 1</p><p>test 2</p></div>')

  d('p')#返回[<p>,<p>]

  print d('p')#返回<p>test 1</p><p>test 2</p>

  print d('p').html()#返回test 1

  注意:当获取到的元素不只一个时,html()、text()方法只返回首个元素的相应内容块

4.eq(index) ——根据给定的索引号得到指定元素

  接上例,若想得到第二个p标签内的内容,则可以:

  print d('p').eq(1).html() #返回test 2

5.filter() ——根据类名、id名得到指定元素,例:

  d=pq("<div><p id='1'>test 1</p><p class='2'>test 2</p></div>")  

  d('p').filter('#1') #返回[<p#1>]

  d('p').filter('.2') #返回[<p.2>]

6.find() ——查找嵌套元素

  d=pq("<div><p id='1'>test 1</p><p class='2'>test 2</p></div>")  

  d('div').find('p')#返回[<p#1>, <p.2>]

  d('div').find('p').eq(0)#返回[<p#1>]

7.直接根据类名、id名获取元素

  d=pq("<div><p id='1'>test 1</p><p class='2'>test 2</p></div>")

  d('#1').html()#返回test 1

  d('.2').html()#返回test 2

8.获取属性值

  d=pq("<p id='my_id'><a href='http://hello.com'>hello</a></p>")

  d('a').attr('href')#返回http://hello.com

  d('p').attr('id')#返回my_id

9.修改属性值

  d('a').attr('href', 'http://baidu.com')把href属性修改为了baidu

10.addClass(value) ——为元素添加类

  d=pq('<div></div>')

  d.addClass('my_class')#返回[<div.my_class>]

11.hasClass(name) #返回判断元素是否包含给定的类

  d=pq("<div class='my_class'></div>")

  d.hasClass('my_class')#返回True

12.children(selector=None) ——获取子元素

  d=pq("<span><p id='1'>hello</p><p id='2'>world</p></span>")

  d.children()#返回[<p#1>, <p#2>]

  d.children('#2')#返回[<p#2>]

13.parents(selector=None)——获取父元素  

  d=pq("<span><p id='1'>hello</p><p id='2'>world</p></span>")

  d('p').parents()#返回[<span>]

  d('#1').parents('span')#返回[<span>]

  d('#1').parents('p')#返回[]

14.clone() ——返回一个节点的拷贝

15.empty() ——移除节点内容

16.nextAll(selector=None) ——返回后面全部的元素块

  d=pq("<p id='1'>hello</p><p id='2'>world</p><img scr='' />")

  d('p:first').nextAll()#返回[<p#2>, <img>]

  d('p:last').nextAll()#返回[<img>]

17.not_(selector) ——返回不匹配选择器的元素

  d=pq("<p id='1'>test 1</p><p id='2'>test 2</p>")

  d('p').not_('#2')#返回[<p#1>]

jQuery的文档

  可以参考query的文档来明白pyquery的使用方式

  jQuery 遍历函数

  jQuery 遍历函数包括了用于筛选、查找和串联元素的方法。

  函数 描述

  .add() 将元素添加到匹配元素的集合中。

  .andSelf() 把堆栈中之前的元素集添加到当前集合中。

  .children() 获得匹配元素集合中每个元素的所有子元素。

  .closest() 从元素本身开始,逐级向上级元素匹配,并返回最先匹配的祖先元素。

  .contents() 获得匹配元素集合中每个元素的子元素,包括文本和注释节点。

  .each() 对 jQuery 对象进行迭代,为每个匹配元素执行函数。

  .end() 结束当前链中最近的一次筛选操作,并将匹配元素集合返回到前一次的状态。

  .eq() 将匹配元素集合缩减为位于指定索引的新元素。

  .filter() 将匹配元素集合缩减为匹配选择器或匹配函数返回值的新元素。

  .find() 获得当前匹配元素集合中每个元素的后代,由选择器进行筛选。

  .first() 将匹配元素集合缩减为集合中的第一个元素。

  .has() 将匹配元素集合缩减为包含特定元素的后代的集合。

  .is() 根据选择器检查当前匹配元素集合,如果存在至少一个匹配元素,则返回 true。

  .last() 将匹配元素集合缩减为集合中的最后一个元素。

  .map() 把当前匹配集合中的每个元素传递给函数,产生包含返回值的新 jQuery 对象。

  .next() 获得匹配元素集合中每个元素紧邻的同辈元素。

  .nextAll() 获得匹配元素集合中每个元素之后的所有同辈元素,由选择器进行筛选(可选)。

  .nextUntil() 获得每个元素之后所有的同辈元素,直到遇到匹配选择器的元素为止。

  .not() 从匹配元素集合中删除元素。

  .offsetParent() 获得用于定位的第一个父元素。

  .parent() 获得当前匹配元素集合中每个元素的父元素,由选择器筛选(可选)。

  .parents() 获得当前匹配元素集合中每个元素的祖先元素,由选择器筛选(可选)。

  .parentsUntil() 获得当前匹配元素集合中每个元素的祖先元素,直到遇到匹配选择器的元素为止。

  .prev() 获得匹配元素集合中每个元素紧邻的前一个同辈元素,由选择器筛选(可选)。

  .prevAll() 获得匹配元素集合中每个元素之前的所有同辈元素,由选择器进行筛选(可选)。

  .prevUntil() 获得每个元素之前所有的同辈元素,直到遇到匹配选择器的元素为止。

  .siblings() 获得匹配元素集合中所有元素的同辈元素,由选择器筛选(可选)。

  .slice() 将匹配元素集合缩减为指定范围的子集。

Python中PyQuery库的使用总结的更多相关文章

  1. Python中PyQuery库的使用

    pyquery库是jQuery的Python实现,可以用于解析HTML网页内容,我个人写过的一些抓取网页数据的脚本就是用它来解析html获取数据的. 它的官方文档地址是:http://packages ...

  2. python中requests库使用方法详解

    目录 python中requests库使用方法详解 官方文档 什么是Requests 安装Requests库 基本的GET请求 带参数的GET请求 解析json 添加headers 基本POST请求 ...

  3. Python中第三方库Requests库的高级用法详解

    Python中第三方库Requests库的高级用法详解 虽然Python的标准库中urllib2模块已经包含了平常我们使用的大多数功能,但是它的API使用起来让人实在感觉不好.它已经不适合现在的时代, ...

  4. Python爬虫-- PyQuery库

    PyQuery库 PyQuery库也是一个非常强大又灵活的网页解析库,PyQuery 是 Python 仿照 jQuery 的严格实现.语法与 jQuery 几乎完全相同,所以不用再去费心去记一些奇怪 ...

  5. Python中cv2库和matplotlib库色彩空间排布不一致

    今天在python中读如图片时发现以下问题: 1.在from matplotlib import pyplot as plt之后,再import cv2 cv2.imshow()不能正常使用,还不知道 ...

  6. Python 中拼音库 PyPinyin 的用法【华为云技术分享】

    [摘要] 最近碰到了一个问题,项目中很多文件都是接手过来的中文命名的一些素材,结果在部署的时候文件名全都乱码了,导致项目无法正常运行. 后来请教了一位大佬怎么解决文件名乱码的问题,他说这个需要正面解决 ...

  7. python中pyperclip库的功能

    python3中pyperclip库的功能 作用就是复制.粘贴 例子 import pyperclip pyperclip.copy('Hello world!') pyperclip.paste() ...

  8. Python中msgpack库的使用

    msgpack用起来像json,但是却比json快,并且序列化以后的数据长度更小,言外之意,使用msgpack不仅序列化和反序列化的速度快,数据传输量也比json格式小,msgpack同样支持多种语言 ...

  9. Python中datetime库的用法

    datetime模块用于是date和time模块的合集,datetime有两个常量,MAXYEAR和MINYEAR,分别是9999和1. datetime模块定义了5个类,分别是 1.datetime ...

随机推荐

  1. Mayavi入门

    环境,win7/10 64位, python3.x 1,安装 Mayavi4.6 原装的pip下载奇慢,先更换一下源,豆瓣的更新要比清华的快 首先在window的文件夹窗口输入 : %APPDATA% ...

  2. Java学习笔记(十三一)——Xml 常用知识总结

    [前面的话] 在学习spring框架,发现很多地方都用到了Xml的知识,所以会过头来再学习学习Xml. 本章学习的是Xml的基础,所以基础性文章,选择性阅读. [Xml] 一.Xml初步了解 XML ...

  3. Interllij IDEA常用快捷键

    [常规] Ctrl+Shift + Enter,语句完成 “!”,否定完成,输入表达式时按 “!”键 Ctrl+E,最近的文件 Ctrl+Shift+E,最近更改的文件 Shift+Click,可以关 ...

  4. PHP7 微信支付回调失败 解决

    升级完PHP7 发现微信支付回调失败.原来是 $GLOBALS['HTTP_RAW_POST_DATA'];没有定义的问题.php7 移除了这个全局变量. 问题代码如下: 微信API :WxPay.A ...

  5. 戴尔笔记本Inspiron 7560(灵越) 加装固态硬盘从选购固态硬盘到系统迁移到设置SSD为第一启动(受不了了,网上的教程就没有完整的)

    菜鸡我的笔记本为戴尔灵越Inpsiron 7560,其实Inspiron 15 7560 和Inspiron 7560是同一个型号. 电脑拆了安过内存条,换过电池,现在又加了一块固态硬盘. 因为不想安 ...

  6. 妙用next数组打表求最小循环节len

    https://www.cnblogs.com/njczy2010/p/3930688.html https://blog.csdn.net/dominating413421391/article/d ...

  7. python之面向对象编程一

    概述: 面向过程:根据业务逻辑从上到下写垒代码 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可 面向对象:对函数进行分类和封装,让开发“更快更好更强...” 面向过程编程最易被初 ...

  8. Implement Trie(LintCode)

    Implement Trie Implement a trie with insert, search, and startsWith methods. 样例   注意 You may assume ...

  9. python--flask框架的安装和简单使用(转)

    原文地址:http://blog.csdn.net/xiaowu8858892520/article/details/54428196

  10. 批量更新带有命名空间的XML文件的多个节点值

    /// <summary> /// 批量修改节点值 /// </summary> /// <param name="filePath">路径&l ...