爬虫之解析库pyquery
初始化
安装: pip install pyquery
字符串的形式初始化
html = """
<html lang="en">
<head>
简单好用的
<title>PyQuery</title>
</head>
<body>
<ul id="container">
<li class="object-1">Python</li>
<li class="object-2">大法</li>
<li class="object-3">好</li>
</ul>
</body>
</html>
"""
doc = pq(html)
print(doc("title")) <title>PyQuery</title>
URL初始化
# PyQuery对象首先会请求这个url,用得到的HTML内容完成初始化
doc = pq(url="https://www.cnblogs.com/songzhixue/")
print(doc("title")) <title>村里唯一的架构师 - 博客园</title> doc = pq(requests.get("https://www.cnblogs.com/songzhixue/").text)
print(doc("title")) <title>村里唯一的架构师 - 博客园</title> # 两种方法相同
文件初始化
# 读取本地的html文件以字符串的形式传递给PyQuery类来初始 化
doc = pq(filename="demo.html") # demo.html为本地文件
print(doc("title"))
css选择器
html = """
<html lang="en">
<head>
简单好用的
<title>PyQuery</title>
</head>
<body>
<ul id="container">
<li class="object-1">Python</li>
<li class="object-2">大法</li>
<li class="object-3">好</li>
</ul>
</body>
</html>
"""
# 先选取id为container的节点,在选取内部class属性为object-1的节点
doc = pq(html)
print(doc("#container .object-1"))
print(type(doc("#container .object-1"))) # 输出类型还是PyQuery类型 <li class="object-1">Python</li> <class 'pyquery.pyquery.PyQuery'>
查找节点
html = """
<html lang="en">
<head>
简单好用的
<title>PyQuery</title>
</head>
<body>
<ul id="container">
<li class="object-1">
Python
<span>你好</span>
</li>
<li class="object-2">大法</li>
<li class="object-3">好</li>
</ul>
</body>
</html>
"""
子节点
获取所有子孙节点
# 获取所有子孙节点
doc = pq(html)
a = doc("#container")
lis = a.find("li") # 查询的范围是节点的所有子孙节点
print(lis) <li class="object-1">
Python
<span>你好</span>
</li>
<li class="object-2">大法</li>
<li class="object-3">好</li>
获取所有子节点
# 获取所有子节点
doc = pq(html)
a = doc("#container")
li = a.children()
print(li)
通过css选择器选择子节点中的某个节点
# 通过css选择器选择子节点中的某个节点 筛选出子节点中class属性为object-1的节点
doc = pq(html)
a = doc("#container")
li = a.children(".object-1")
print(li) <li class="object-1">
Python
<span>你好</span>
</li>
父节点
直接父节点
# 这里的父节点是该节点的直接父节点
doc = pq(html1)
a= doc(".object-1")
li = a.parent()
print(li) <ul id="container">
<li class="object-1">
Python
<span>你好</span>
</li>
<li class="object-2">大法</li>
<li class="object-3">好</li>
</ul>
祖先节点
# 获取所有父节点,即祖先节点
doc = pq(html1)
a = doc(".object-1")
li = a.parents()
print(li)
# 结果会有两个,一个是父级节点一个是祖先节点
通过css选择器选择父节点中的某个节点
doc = pq(html1)
a = doc(".object-1")
li = a.parents("#container")
print(li) <ul id="container">
<li class="object-1">
Python
<span>你好</span>
</li>
<li class="object-2">大法</li>
<li class="object-3">好</li>
</ul>
兄弟节点
获取所有兄弟节点
# 获取所有兄弟节点
doc = pq(html)
a = doc(".object-1")
li = a.siblings()
print(li) <li class="object-2">大法</li>
<li class="object-3">好</li>
通过css选择器选择兄弟节点中的某个节点
# 通过css选择器选择兄弟节点中的某个节点
doc = pq(html)
a = doc(".object-1")
li = a.siblings(".object-3")
print(li) <li class="object-3">好</li>
遍历
- 上面选择节点的结果可能是多个节点,也可能是单个节点类型都是pyquery类型
单个节点可以直接用str转换成字符串直接打印
doc = pq(html)
a = doc(".object-1")
li = a.siblings(".object-3")
print(str(li))
print(type(str(li))) <li class="object-3">好</li> <class 'str'>
查询结果为多个节点需要遍历来获取
# 查询结果为多个节点需要遍历来获取
# 多个节点需要调用items方法
doc = pq(html)
a = doc("li").items() # 调用items会得到一个生成器
print(a) for i in a: # 循环生成器取出每个节点,类型也是pyquery
print(i) <generator object PyQuery.items at 0x00000254B449CCA8>
<li class="object-1">
Python
<span>你好</span>
</li> <li class="object-2">大法</li> <li class="object-3">好</li>
获取信息
html = """
<html lang="en">
<head>
简单好用的
<title>PyQuery</title>
</head>
<body>
<ul id="container">
<li class="object-1">
Python
<a href="www.taobao.com">world</a>
<a href="www.baidu.com">hello</a> </li>
<li class="object-2">
大法
<a href="www.taobao.com">world</a>
</li>
<li class="object-3">好</li>
</ul>
</body>
</html>
"""
获取属性
# 找到某个节点后,就可以调用attr()方法来获取属性
a = doc(".object-1")
# print(a.find("a").attr("href"))
# 当返回结果包含多个节点时,调用attr()方法只会得到第一个节点的属性 # 如果想要获取所有a节点的属性,需要使用遍历
for i in a.find("a").items():
print(i.attr("href")) www.taobao.com
www.baidu.com
获取文本
- 调用text()方法获取文本
- 当我们得到的结果是多个节点时
- text() 可以获取到匹配标签内的所有文本,返回的是所有文本内容组成的字符串
- html() 返回的是匹配到的所有节点中的第一个节点内的html文本,如果想要获取所有节点中的html需要遍历
获取纯文本
# 获取纯文本
doc = pq(html)
li = doc("li")
li = li.text()
print(li)
Python world hello 大法 world 好
获取节点内的HTML
# 获取节点内的HTML 带标签 只能获取匹配到的第一个节点内的HTML
doc = pq(html)
li = doc("li")
print(li.html()) Python
<a href="www.taobao.com">world</a>
<a href="www.baidu.com">hello</a>
获取节点内的所有HTML
# 遍历获取所有节点中的html
doc = pq(html)
li = doc("li")
for i in li.items():
print(i.html()) Python
<a href="www.taobao.com">world</a>
<a href="www.baidu.com">hello</a>
大法
<a href="www.taobao.com">world</a>
好
节点操作
html = """
<html lang="en">
<head>
简单好用的
<title>PyQuery</title>
</head>
<body>
<ul id="container">
<li class="object-1">
Python
<a href="www.taobao.com">world</a>
<a href="www.baidu.com">hello</a> </li>
<li class="object-2">
大法
<a href="www.taobao.com">world</a>
</li>
<li class="object-3">好</li>
</ul>
</body>
</html>
"""
删除属性
doc = pq(html)
a = doc(".object-2")
print(a)
a.removeClass("object-2") # 删除object-2这个class属性
print(a) <li class="object-2">
大法
<a href="www.taobao.com">world</a>
</li> <li class="">
大法
<a href="www.taobao.com">world</a>
</li>
添加属性
doc = pq(html)
a = doc(".object-2")
print(a)
a.removeClass("object-2") # 删除object-2这个class属性
print(a)
a.addClass("item") # 给该标签添加一个item的class属性
print(a) <li class="object-2">
大法
<a href="www.taobao.com">world</a>
</li> <li class="">
大法
<a href="www.taobao.com">world</a>
</li> <li class="item">
大法
<a href="www.taobao.com">world</a>
</li>
attr
# 属性操作 【一个参数是查找 两个参数是设置属性】
# 修改属性
doc = pq(html)
a = doc(".object-1")
a.attr("name","henry") # 给li标签添加一个name属性,值为henry
print(a) <li class="object-1" name="henry">
Python
<a href="www.taobao.com">world</a>
<a href="www.baidu.com">hello</a> </li>
text
# 文本操作 【有参数是添加或修改文本内容 没有参数是查找所有文本内容】
# 文本内容操作
doc = pq(html)
a = doc(".object-1")
a.text("hello world")
print(a) <li class="object-1">hello world</li>
html
# 标签操作 【有参数是添加或修改标签 没有参数是查找第一个标签,获取所有需要遍历】
# 标签操作
doc = pq(html)
a = doc(".object-1")
a.html("<span>span标签</span>")
print(a) <li class="object-1"><span>span标签</span></li>
伪类选择器
html = """
<div class="wrap">
<div id="container">
<ul class="list">
<li class="item-0">fist item</li>
<li class="item-1"><a href="link1.html">second</a></li>
<li class="item-0 active"><a href="link2.html"><span class="bold">third item</span></a></li>
<li class="item-1 active"><a href="link3.html">fourth item</a></li>
<li class="item-0"><a href="link4.html">fifth item</a></li>
</ul>
</div>
</div>
"""
选择第一个节点
# 选择第一个节点
doc = pq(html)
a = doc("li:first-child")
print(a) <li class="item-0">fist item</li>
选择最后一个节点
# 选择最后一个节点
doc = pq(html)
a = doc("li:last-child")
print(a) <li class="item-0"><a href="link4.html">fifth item</a></li>
选择指定节点
# 选择第2个li节点
doc = pq(html)
a = doc("li:nth-child(2)")
print(a) <li class="item-1"><a href="link1.html">second</a></li>
选择指定节点之后的节点
# 选择第2个节点之后的所有节点
doc = pq(html)
a = doc("li:gt(2)")
print(a) <li class="item-1 active"><a href="link3.html">fourth item</a></li>
<li class="item-0"><a href="link4.html">fifth item</a></li>
选择偶数节点
# 选择偶数位值节点
doc = pq(html)
a = doc("li:nth-child(2n)")
print(a) <li class="item-1"><a href="link1.html">second</a></li>
<li class="item-1 active"><a href="link3.html">fourth item</a></li>
包含哪些文本的节点
# 包含second文本的节点
doc = pq(html)
a = doc("li:contains(second)")
print(a) <li class="item-1"><a href="link1.html">second</a></li>
爬虫之解析库pyquery的更多相关文章
- 小白学 Python 爬虫(23):解析库 pyquery 入门
人生苦短,我用 Python 前文传送门: 小白学 Python 爬虫(1):开篇 小白学 Python 爬虫(2):前置准备(一)基本类库的安装 小白学 Python 爬虫(3):前置准备(二)Li ...
- Python爬虫【解析库之pyquery】
该库跟jQuery的使用方法基本一样 http://pyquery.readthedocs.io/ 官方文档 解析库的安装 pip3 install pyquery 初始化 1.字符串初始化 htm ...
- Python爬虫【解析库之beautifulsoup】
解析库的安装 pip3 install beautifulsoup4 初始化 BeautifulSoup(str,"解析库") from bs4 import BeautifulS ...
- python3解析库pyquery
pyquery是一个类似jquery的python库,它实现能够在xml文档中进行jQuery查询,pyquery使用lxml解析器进行快速在xml和html文档上操作,它提供了和jQuery类似的语 ...
- Python的网页解析库-PyQuery
PyQuery库也是一个非常强大又灵活的网页解析库,如果你有前端开发经验的,都应该接触过jQuery,那么PyQuery就是你非常绝佳的选择,PyQuery 是 Python 仿照 jQuery 的严 ...
- python爬虫三大解析库之XPath解析库通俗易懂详讲
目录 使用XPath解析库 @(这里写自定义目录标题) 使用XPath解析库 1.简介 XPath(全称XML Path Languang),即XML路径语言,是一种在XML文档中查找信息的语言. ...
- Python3编写网络爬虫07-基本解析库pyquery的使用
三.pyquery 简介:同样是一个强大的网页解析工具 它提供了和jQuery类似的语法来解析HTML文档,支持CSS选择器,使用非常方便 安装: pip install pyquery 验证: im ...
- 爬虫之解析库-----re、beautifulsoup、pyquery
一.介绍 Beautiful Soup 是一个可以从HTML或XML文件中提取数据的Python库.它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式.Beautiful Soup会帮你 ...
- python爬虫之解析库Beautiful Soup
为何要用Beautiful Soup Beautiful Soup是一个可以从HTML或XML文件中提取数据的Python库.它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式, 是一个 ...
随机推荐
- SPOJ1421_Goods_循环节
题意:1-n的一个排列,两两互换,每个位置每天只能做一次交换,问最多几天能交换成1-n,并且输出交换步骤. 解法:把该置换中所有的循环节找出,各循环节之间的交换是并行的,两两不相关,每天只需在循环节内 ...
- 反向代理在APP通过无线路由接入3G/4G时的特殊作用
由于某些需求,要临时搭建局域网络,给小范围内大量移动客户端提供特定的网络服务,这样的服务通常包含常见的HTTP服务.数据文件下载服务.RESTFul接口服务等.市面常见的非企业级WIFI路由器能够承受 ...
- Redis---学习笔记(更新中)
一.基本命令 #查看所有键 keys * #查看指定键 keys key #查看模糊键 keys ke* keys ke? keys ke[a-z] keys ke\? #判断键是否存在 exists ...
- RequestMapping原理分析和RequestMappingHandlerMapping
转载https://juejin.im/post/5cbeadb96fb9a031ff0d18b5 源码版本spring-webmvc-4.3.7.RELEASE 使用Spring MVC的同学一般都 ...
- Centos6 samba服务配置
1.在阿里虚拟机中配置包源 在ecs的 /etc/yum.repos.d 创建个 alios.repo,内容如下 [alios.$releasever.base.$basearch] name=al ...
- Hive 学习之路(五)—— Hive 分区表和分桶表
一.分区表 1.1 概念 Hive中的表对应为HDFS上的指定目录,在查询数据时候,默认会对全表进行扫描,这样时间和性能的消耗都非常大. 分区为HDFS上表目录的子目录,数据按照分区存储在子目录中.如 ...
- node.js中模块,require
在php,C++中都有命名空间的概念,命名空间主要是用来解决引入文件存在函数,类,变量重名的问题,在node.js中,没有命名空间这么复杂的概念,在node中,有模块的概念,也就是将功能性的代码都放在 ...
- 【朝花夕拾】Android自定义View篇之(一)View绘制流程
前言 转载请申明转自[https://www.cnblogs.com/andy-songwei/p/10955062.html]谢谢! 自定义View.多线程.网络,被认为是Android开发者必须牢 ...
- Python静态方法,其实暗藏玄机
文章首发于 微信公众号:Python编程时光 这个标题「静态方法其实暗藏玄机」其实只是该文章的一个知识点.或许有些标题党,但没有关系,我相信有不少人对此并没有深入研究他们,不信我问你三个问题,你看能否 ...
- 恢复云数据库MySQL的备份文件到自建数据库遇到的报错
报错信息 : 恢复云数据库MySQL的备份文件到自建数据库,自建数据库版本5.6.36. 按照阿里云文档操作,启动数据库报错 -- :: [ERROR] /application/mysql/bin/ ...