pyquery允许您在xml文档上进行jquery查询。 API尽可能与jquery类似。 pyquery使用lxml快速操作xml和html。直接使用pip3 install pyquery安装即可。


加载HTML

我们可以使用PyQuery类从字符串,lxml文档,文件或URL中加载html文档。

从字符串中加载

from pyquery import PyQuery as pqtext = '''
<title>This is a test</title>
<div><ul><li class="sp item-0" name="one"><a href="www.baidu.com">baidu</a><li class="sp item-1" name="two"><a href="https://blog.csdn.net/qq_25343557">myblog</a><li class="sp item-2" name="two"><a href="https://www.csdn.net/">csdn</a><li class="sp item-3" name="four"><a href="https://hao.360.cn/?a1004">hao123</a>
'''
html = pq(text)
print(html('title'))#获取title节点

从lxml文档中加载

from pyquery import PyQuery as pq
from lxml import etreehtml = pq(etree.HTML('<title>This is a test</title>'))
print(html('title'))

从文件中加载

from pyquery import PyQuery as pqhtml = pq(filename='test.html')
print(html('li'))

从URL中加载

from pyquery import PyQuery as pqhtml = pq(url='https://blog.csdn.net/qq_25343557/article/details/82017125')
print(html('title'))

查找节点##

获取子节点

查找当前节点下的子节点(包括子孙节点)时我们可以使用`find(selector)`方法。

from pyquery import PyQuery as pqtext='''<div><ul class='myul'><li class="item-0"><a href="www.baidu.com" class='sp'>baidu</a></li><li class="item-1"><a href="https://blog.csdn.net/qq_25343557">myblog</a></li><li class="item-2"><a href="https://www.csdn.net/">csdn</a></li><li class="item-3"><a href="https://hao.360.cn/?a1004" class='sp'>hao123</a></li></ul></div>
'''
html = pq(text)
ul = html('.myul')#根据class选择ul节点
result = ul.find('a')#返回所有a标签
print(result)
result = ul.find('a[class="sp"]')#返回所有class属性为sp的a标签
print(result)


find(selector)方法返回所有的子节点,包括子孙节点,如果我们只想返回直接子节点可以使用children(selector) 方法。

获取父节点

我们可以使用`parent()` 方法查找当前节点的父节点。

html = pq(text)
ul = html('.myul')#根据class选择ul节点
result = ul.parent()
print(result)


parent()方法只能获取当前节点的直接父节点,无法获取祖先节点,如果需要获取祖先节点使用parents(selector)方法。

html = pq(text)
ul = html('.myul')#根据class选择ul节点
result = ul.parents('body')#获取名为body的祖先节点
print(result)

获取兄弟节点

我们可以使用`sibllings()` 获取兄弟节点。

html = pq(text)
li = html('.item-1')#根据class选择第二个li节点
result = li.siblings()#获取兄弟节点
print(result)


可以传入css选择器选取符合条件的兄弟节点。

遍历节点##

通过查找所有li标签我们会发现无论是获取一个节点还是多个节点都是返回一个PyQuery对象,而不像前面bs4一样获取一个列表。现在我们多获取到的多个li节点进行遍历。

html = pq(text)
lis = html('li')
for li in lis.items():#调用items()方法得到一个生成器,遍历得到的每一个节点同样是PyQuery对象print(li)

获取信息

获取属性

我们可通过调用`attr(name)`方法来获取属性.

html = pq(text)
result = html('a')
for a in result.items():print(a.attr('href'))#也可以调用attr属性来获取属性值
for a in result.items():print(a.attr.href)


我们想获取所有a节点的href属性必须遍历每个节点,依次获取。如果直接使用result.attr('href') 只能获取到第一个节点的值。

获取文本

我们可以使用`text()` 方法获取节点内的文本内容。

html = pq('<title>This is a test</title>')
result = html('title')
print(result.text())


如果我们查找的节点有多个,当我们调用text() 方法获取文本内容时也会将所有节点的文本提取出来,中间用空格分隔开。

html = pq('<p><span>python</span></p><p><span>java</span></p><p><span>c++</span></p><p><span>ruby</span></p>')
result = html('p')
print(result.text())


使用html() 方法可以查看节点内的html内容。如果是多个节点,在不逐一遍历节点的情况下直接调用html() 方法只返回第一个节点的html内容。

from pyquery import PyQuery as pqhtml = pq('<p><span>python</span></p><p><span>java</span></p><p><span>c++</span></p><p><span>ruby</span></p>')
result = html('p')
print(result.html())

节点操作

addClass()和removeClass()

addClass():为节点添加class属性; removeClass:为节点删除class属性。

from pyquery import PyQuery as pqhtml = pq('<ul><li class="item-0">1</li><li class="item-1">2</li><li class="item-2">3</li><li class="item-3">4</li></ul>')
result = html('.sp')#寻找class属性包含sp的节点
print(result)
html('.item-0').addClass('sp')#添加class属性为sp
result = html('.sp')#寻找class属性包含sp的节点
print(result)
html('.item-0').removeClass('sp')#删除class属性为sp
result = html('.item-0')
print(result)
print('=============')

attr、text和html

from pyquery import PyQuery as pqhtml = pq('<ul><li class="item-0">1</li><li class="item-1">2</li><li class="item-2">3</li><li class="item-3">4</li></ul>')
result = html('.item-0')
print('原始节点:',result)
result.attr('name','firstLi')#使用attr添加属性
print('添加name属性:',result)
result.text('人生苦短,我学Python.')
print('添加文本:',result)
result.html('<a href="http://www.baidu.com">baidu</a>')
print('添加html内容:',result)
print('=============')

remove()

通过`remove()` 删除某一节点。

from pyquery import PyQuery as pqhtml = pq('<p>人生苦短,我学Python.<i>hello</i></p>')
result = html('p')
print(result.text())


实际上我想提取的仅仅是“人生苦短,我学Python.”这些内容,可是text()方法会将节点内的所有文本都提取到,这时候我们就需要将p节点内从i节点先删除,再提取文本内容。

from pyquery import PyQuery as pqhtml = pq('<p>人生苦短,我学Python.<i>hello</i></p>')
result = html('p')
result.find('i').remove()#找到i节点并删除
print(result.text())

更多节点操作方法详见:https://pythonhosted.org/pyquery/api.html

伪类选择器

我们可以通过伪类选择器选择任意第N个符合条件的节点,包含某一文本的节点。

from pyquery import PyQuery as pqtext='''
<ul>
<li class="item-0">111111<a href="www.baidu.com">baidu</a></li>
<li class="item-1">222222<a href="https://blog.csdn.net/qq_25343557">myblog</a></li>
<li class="item-2">333333<a href="https://www.csdn.net/">csdn</a></li>
<li class="item-3">444444<a href="https://hao.360.cn/?a1004">hao123</a></li>
</ul>
'''
html = pq(text)
result = html('li:first-child')
print('第一个li节点:',result)
result = html('li:last-child')
print('最后一个li节点:',result)
result = html('li:nth-child(2)')
print('第二个li节点:',result)
result = html('li:nth-child(2n)')
print('偶数li节点:',result)
result = html('li:gt(2)')
print('位置大于2的li节点:',result)
result = html('li:contains("csdn")')
print('文本内容包含2的li节点:',result)#文本内容包括子节点中的

更多css伪类选择器查看:http://www.w3school.com.cn/css/css_pseudo_classes.asp

(廿)Python爬虫:pyquery的使用相关推荐

  1. python爬虫——Pyquery库

    Pyquery库并非python标准库,所以需要下载:pip install pyquery Pyquery是一个类似jquery(一个js库)的库,使用 lxml 进行快速 xml 和 html 操 ...

  2. Python 爬虫十六式 - 第六式:JQuery的假兄弟-pyquery

    PyQuery:一个类似jquery的python库 学习一时爽,一直学习一直爽   Hello,大家好,我是 Connor,一个从无到有的技术小白.上一次我们说到了 BeautifulSoup 美味 ...

  3. python contains类似函数_五步教会你用python爬虫神器PyQuery!(内含详细步骤和代码)...

    前言: 今天为大家带来的内容,是五步教会你用python爬虫神器PyQuery!(内含详细步骤和代码),在这里还是要啰嗦下,为了有更好的观赏性,大部分代码用图片的方式呈现出来!喜欢的话不忘点赞关注不迷 ...

  4. python网络爬虫——pyquery的使用(六)

    python网络爬虫--pyquery的使用(六) pyquery的使用 一.pyquery的介绍 二.pyquery的使用 1.初始化工作 2.查找节点 3.遍历 4.获取信息 5.节点操作 6.伪 ...

  5. python + selenium +pyquery 爬虫 爬取 1688详情图片 阿里巴巴详情图片 与标题 下载图片并进行压缩

    python + selenium +pyquery 爬虫  爬取 1688详情图片 阿里巴巴详情图片 与标题 下载图片并进行压缩 用到的库和源码下载地址 需要用到chromedriver  包含wi ...

  6. Python爬虫辅助利器PyQuery模块的安装使用攻略

    这篇文章主要介绍了Python爬虫辅助利器PyQuery模块的安装使用攻略,PyQuery可以方便地用来解析HTML内容,使其成为众多爬虫程序开发者的大爱,需要的朋友可以参考下 Windows下的安装 ...

  7. python爬虫(五)------pyquery库(一)------attr()、text()、html()、addClass()、hasClass()、removeattr()等方法

    python爬虫(四)------bs4库(二)------BeautifulSoup的findall().find(().select()和select_one()等方法 pyquery库 安装 p ...

  8. python爬虫之PyQuery的常用用法

    安装依旧很简单pip install pyquery,对于pycharm的安装看这篇pycharm安装第三方库 首先我们定义一个HTML文本段作为下边的例子 <html><head& ...

  9. Python 爬虫(五):PyQuery 框架

    目录 1 准备工作 1.1 安装 1.2 初始化 2 快速上手 2.1 基本使用 2.2 伪类选择器 PyQuery 是仿照 jQuery 实现的,语法与 jQuery 几乎完全相同,如果你熟悉 jQ ...

  10. Python爬虫从入门到精通——解析库pyquery的使用

    分类目录:<Python爬虫从入门到精通>总目录 解析库使用篇: 解析库re的使用:正则表达式 解析库XPath的使用 解析库Beautiful Soup的使用 解析库pyquery的使用 ...

最新文章

  1. mysql优化 博客园_MySQL优化
  2. ms sql 索引(一)
  3. oracle 游标中抛出异常的处理方式
  4. 20行python代码的入门级小游戏-用Python设计一个经典小游戏
  5. 【已解决】nimfa 环境的详细搭建过程 + 各种依赖库的安装、下载、调试
  6. 中软python编码规范考试试题_卓越分享 | 如何写出一手漂亮的Python代码?
  7. Datawhale 一周年,生日快乐!
  8. 用异或的性质实现简单加密解密
  9. ADO.NET编程(3)在内存中对DataTable进行增/删/改操作
  10. MIF/MID格式简介
  11. 【爬虫】使用Scrapy框架进行爬虫详解及示例
  12. Qt On Android 一键加QQ群
  13. Mac安装双系统后无法切回mac系统
  14. 编程达人教你如何快速掌握一门编程语言附技术书阅读方法论
  15. SparkSteaming实时接收网络端口数据和hdfs做Wordcount
  16. 【英语演讲】Simulation Test 模拟测试
  17. 华为高管回应养猪传闻,赋能企业用AI养好猪
  18. prompt tuning
  19. 【论文下饭】Functional Connectivity Prediction With Deep Learning for Graph Transformation
  20. au6989sn-gtd_GTD和OmniFocus 2-我的工作流程

热门文章

  1. 算法:主宰这个世界的10大算法
  2. [笔记] 《互联网思维独孤九剑》
  3. JAVA毕业设计分时共享办公系统计算机源码+lw文档+系统+调试部署+数据库
  4. ewomail开源版邮箱服务器 批量添加邮箱实现邮箱批量接收验证码
  5. 小程序 连接websocket 开发者工具上可以,但是真机上不行
  6. C# 十进制转十六进制
  7. txt 文本编码“unicode(UTF-8)”不适用 解决方法
  8. 交互设计课程的心得体会
  9. Java代码实现归并排序
  10. tp841虚拟服务器,TP-Link新版路由器虚拟服务器(端口映射)设置方法