初始化

安装: 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>&#13; doc = pq(requests.get("https://www.cnblogs.com/songzhixue/").text)
print(doc("title")) <title>村里唯一的架构师 - 博客园</title>&#13; # 两种方法相同

文件初始化

# 读取本地的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的更多相关文章

  1. 小白学 Python 爬虫(23):解析库 pyquery 入门

    人生苦短,我用 Python 前文传送门: 小白学 Python 爬虫(1):开篇 小白学 Python 爬虫(2):前置准备(一)基本类库的安装 小白学 Python 爬虫(3):前置准备(二)Li ...

  2. Python爬虫【解析库之pyquery】

    该库跟jQuery的使用方法基本一样  http://pyquery.readthedocs.io/ 官方文档 解析库的安装 pip3 install pyquery 初始化 1.字符串初始化 htm ...

  3. Python爬虫【解析库之beautifulsoup】

    解析库的安装 pip3 install beautifulsoup4 初始化 BeautifulSoup(str,"解析库") from bs4 import BeautifulS ...

  4. python3解析库pyquery

    pyquery是一个类似jquery的python库,它实现能够在xml文档中进行jQuery查询,pyquery使用lxml解析器进行快速在xml和html文档上操作,它提供了和jQuery类似的语 ...

  5. Python的网页解析库-PyQuery

    PyQuery库也是一个非常强大又灵活的网页解析库,如果你有前端开发经验的,都应该接触过jQuery,那么PyQuery就是你非常绝佳的选择,PyQuery 是 Python 仿照 jQuery 的严 ...

  6. python爬虫三大解析库之XPath解析库通俗易懂详讲

    目录 使用XPath解析库 @(这里写自定义目录标题) 使用XPath解析库 1.简介   XPath(全称XML Path Languang),即XML路径语言,是一种在XML文档中查找信息的语言. ...

  7. Python3编写网络爬虫07-基本解析库pyquery的使用

    三.pyquery 简介:同样是一个强大的网页解析工具 它提供了和jQuery类似的语法来解析HTML文档,支持CSS选择器,使用非常方便 安装: pip install pyquery 验证: im ...

  8. 爬虫之解析库-----re、beautifulsoup、pyquery

    一.介绍 Beautiful Soup 是一个可以从HTML或XML文件中提取数据的Python库.它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式.Beautiful Soup会帮你 ...

  9. python爬虫之解析库Beautiful Soup

    为何要用Beautiful Soup Beautiful Soup是一个可以从HTML或XML文件中提取数据的Python库.它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式, 是一个 ...

随机推荐

  1. PHP中关于时间、时区、本地时间、UTC时间、GMT时间、时间戳等知识的梳理

    在PHP开发中,我们经常会在时间问题上被搞糊涂,比如我们希望显示一个北京时间,但是当我们使用date函数进行输出时,却发现少了8个小时.几乎所有的php猿类都必须对php中几个重要的时间转换等方法进行 ...

  2. webstrom sass 关于arguments 和 Output paths to refresh 设置

    第一种设置: Arguments:--no-cache --update -t expanded $FileName$:$FileNameWithoutExtension$.css Output pa ...

  3. PWN菜鸡入门之CANARY探究

    看门见码 #include <stdio.h> #include <unistd.h> #include <stdlib.h> #include <strin ...

  4. spring 5.x 系列第4篇 —— spring AOP (代码配置方式)

    文章目录 一.说明 1.1 项目结构说明 1.2 依赖说明 二.spring aop 2.1 创建待切入接口及其实现类 2.2 创建自定义切面类 2.3 配置切面 2.4 测试切面 2.5 切面执行顺 ...

  5. 【MySQL插入更新重复值】ON DUPLICATE KEY UPDATE用法

    要插入的数据  与表中记录数据的 惟一索引或主键中产生重复值,那么就会发生旧行的更新 弊端:造成主键自增不连续.适合数据量不大的表. ON DUPLICATE KEY UPDATE后面的条件 eg有如 ...

  6. 手动搭建自己的nuget服务器及使用

    这篇文章的主要目的: 1.搭建自己的私有的nuget服务器 2.打包代码为nuget包 3.在其他项目中使用私有服务器上的nuget包 一. 搭建自己的nuget服务器 1. 创建一个空的ASP.NE ...

  7. Spring Framework 条件装配 之 @Conditional

    Spring Framework 条件装配 之 @Conditional 前言 了解SpringBoot的小伙伴对Conditional注解一定不会陌生,在SpringBoot项目中,Conditio ...

  8. Git小技巧之使用Rebase命令合并提交

    想要获取更多文章可以访问我的博客 - 代码无止境. 在日常的开发过程中,我们一个功能可能会有很多次提交.而且我们公司的开发是不允许直接往公司仓库提交代码,所以需要fork到自己的仓库然后merge过去 ...

  9. 未能加载文件或程序集“Seagull.BarTender.Print, Version=11.0.8.1, Culture=neutral, PublicKeyToken=109ff779a1b4cbc7

    这2天项目上需要使用BarTender打印软件,使用BarTender的库的时候时候发现一个特别的问题: 未能加载文件或程序集“Seagull.BarTender.Print, Version=11. ...

  10. C#常用正则表达式回顾

    项目中有些时候需要用到正则表达式,但是自己对正则表达式不熟悉,每次学习完,过一段时间(长时间)不用,就又忘了,每次需要用到的时候都需要百度下,比较麻烦,这里把C#中经常用到的正则表达式做下总结. 正则 ...