(廿)Python爬虫:pyquery的使用
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的使用相关推荐
- python爬虫——Pyquery库
Pyquery库并非python标准库,所以需要下载:pip install pyquery Pyquery是一个类似jquery(一个js库)的库,使用 lxml 进行快速 xml 和 html 操 ...
- Python 爬虫十六式 - 第六式:JQuery的假兄弟-pyquery
PyQuery:一个类似jquery的python库 学习一时爽,一直学习一直爽 Hello,大家好,我是 Connor,一个从无到有的技术小白.上一次我们说到了 BeautifulSoup 美味 ...
- python contains类似函数_五步教会你用python爬虫神器PyQuery!(内含详细步骤和代码)...
前言: 今天为大家带来的内容,是五步教会你用python爬虫神器PyQuery!(内含详细步骤和代码),在这里还是要啰嗦下,为了有更好的观赏性,大部分代码用图片的方式呈现出来!喜欢的话不忘点赞关注不迷 ...
- python网络爬虫——pyquery的使用(六)
python网络爬虫--pyquery的使用(六) pyquery的使用 一.pyquery的介绍 二.pyquery的使用 1.初始化工作 2.查找节点 3.遍历 4.获取信息 5.节点操作 6.伪 ...
- python + selenium +pyquery 爬虫 爬取 1688详情图片 阿里巴巴详情图片 与标题 下载图片并进行压缩
python + selenium +pyquery 爬虫 爬取 1688详情图片 阿里巴巴详情图片 与标题 下载图片并进行压缩 用到的库和源码下载地址 需要用到chromedriver 包含wi ...
- Python爬虫辅助利器PyQuery模块的安装使用攻略
这篇文章主要介绍了Python爬虫辅助利器PyQuery模块的安装使用攻略,PyQuery可以方便地用来解析HTML内容,使其成为众多爬虫程序开发者的大爱,需要的朋友可以参考下 Windows下的安装 ...
- python爬虫(五)------pyquery库(一)------attr()、text()、html()、addClass()、hasClass()、removeattr()等方法
python爬虫(四)------bs4库(二)------BeautifulSoup的findall().find(().select()和select_one()等方法 pyquery库 安装 p ...
- python爬虫之PyQuery的常用用法
安装依旧很简单pip install pyquery,对于pycharm的安装看这篇pycharm安装第三方库 首先我们定义一个HTML文本段作为下边的例子 <html><head& ...
- Python 爬虫(五):PyQuery 框架
目录 1 准备工作 1.1 安装 1.2 初始化 2 快速上手 2.1 基本使用 2.2 伪类选择器 PyQuery 是仿照 jQuery 实现的,语法与 jQuery 几乎完全相同,如果你熟悉 jQ ...
- Python爬虫从入门到精通——解析库pyquery的使用
分类目录:<Python爬虫从入门到精通>总目录 解析库使用篇: 解析库re的使用:正则表达式 解析库XPath的使用 解析库Beautiful Soup的使用 解析库pyquery的使用 ...
最新文章
- mysql优化 博客园_MySQL优化
- ms sql 索引(一)
- oracle 游标中抛出异常的处理方式
- 20行python代码的入门级小游戏-用Python设计一个经典小游戏
- 【已解决】nimfa 环境的详细搭建过程 + 各种依赖库的安装、下载、调试
- 中软python编码规范考试试题_卓越分享 | 如何写出一手漂亮的Python代码?
- Datawhale 一周年,生日快乐!
- 用异或的性质实现简单加密解密
- ADO.NET编程(3)在内存中对DataTable进行增/删/改操作
- MIF/MID格式简介
- 【爬虫】使用Scrapy框架进行爬虫详解及示例
- Qt On Android 一键加QQ群
- Mac安装双系统后无法切回mac系统
- 编程达人教你如何快速掌握一门编程语言附技术书阅读方法论
- SparkSteaming实时接收网络端口数据和hdfs做Wordcount
- 【英语演讲】Simulation Test 模拟测试
- 华为高管回应养猪传闻,赋能企业用AI养好猪
- prompt tuning
- 【论文下饭】Functional Connectivity Prediction With Deep Learning for Graph Transformation
- au6989sn-gtd_GTD和OmniFocus 2-我的工作流程
热门文章
- 算法:主宰这个世界的10大算法
- [笔记] 《互联网思维独孤九剑》
- JAVA毕业设计分时共享办公系统计算机源码+lw文档+系统+调试部署+数据库
- ewomail开源版邮箱服务器 批量添加邮箱实现邮箱批量接收验证码
- 小程序 连接websocket 开发者工具上可以,但是真机上不行
- C# 十进制转十六进制
- txt 文本编码“unicode(UTF-8)”不适用 解决方法
- 交互设计课程的心得体会
- Java代码实现归并排序
- tp841虚拟服务器,TP-Link新版路由器虚拟服务器(端口映射)设置方法