初始化

安装: 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>

最新文章

  1. 防御病毒邮件得看U-Mail邮件网关
  2. 从Lumia退役看为什么WP走向没落
  3. 【DFS深搜初步】HDOJ-2952 Counting Sheep、NYOJ-27 水池数目
  4. 浅析 ThreadLocal
  5. 在Linux下查看系统版本信息命令总结
  6. devenv 命令用法
  7. 使用GetLogicalDriveStrings获取驱动器根路径
  8. 处理鼠标响应事件(最简单控件 good)
  9. Android 自定义控件 优雅实现元素间的分割线 (支持3.0以下)
  10. iOS UIImageView自适应图片大小
  11. Visual Studio项目模板与向导开发
  12. iOS开发之UINavigationController
  13. HUST 1583 长度单位
  14. 第十节 集合类Collection和Map
  15. centos7下安装docker(24docker swarm 数据管理)
  16. sql 去掉 空格
  17. Jupyter notebook 转 pdf [完整转换]
  18. cogs 2223. [SDOI2016 Round1] 生成魔咒
  19. 一步步实现 easyui datagrid表格宽度自适应,效果非常好
  20. k8s1.8 ingress 配置

热门文章

  1. Linux中同步互斥机制研究之原子操作
  2. asp.net mvc+jquery easyui开发实战教程之网站后台管理系统开发2-Model层建立
  3. 敏捷开发中如何做好Sprint规划?
  4. SYN591-A型 计数器
  5. dubbo源码分析02:服务引用
  6. 我与微软的不解之缘 - 我的Insider Dev Tour 2019讲师之旅
  7. Git--将已有的项目添加到github
  8. 【搬家啦】2019年06月20日csdn难民来报道啦~
  9. php __autoload 在有命名空间的时候失效(使用的局限性)
  10. H5 离线缓存的用法