1. 简介
-
JQuery
JQuery是一个JavaScript库,用于处理DOM.使用jQuery,我们可以查找,选择,变量和操作HTML文档中的各个部分 -
pyquery
python库,具有与jquery类似的API.使用lxml模块进行快速的XML和HTML操作。该API尽可能类似jQuery
2. 安装
pip install pyquery
3. 简单使用
3.1 创建对象
- 直接传入HTML数据
from pyquery import PyQuery # 导入模块
# 1. 本地数据
with open("html/www.baidu.com.html", encoding="utf-8") as f:
contents = f.read()
doc = PyQuery(contents) # 创建PyQuery对象,传参是HTML数据
### 2. web资源
import requests
resp = requests.get("https://www.baidu.com/")
resp.encoding = "utf-8"
doc = PyQuery(resp.text) # 创建PyQuery对象
注:解决中文乱码https://blog.csdn.net/linzi1994/article/details/108805110
- 传URL
doc = PyQuery("https://www.baidu.com", encoding="utf-8") # 添加encoding,避免中文乱码
- 传lxml.etree
from lxml import etree
doc = PyQuery(etree.fromstring("<html></html>"))
# 类型:<class 'pyquery.pyquery.PyQuery'>
- 传文件
doc = PyQuery(filename="html/www.baidu.com.html", encoding="utf-8")
# 报错:UnicodeDecodeError: 'gbk' codec can't decode byte 0x80 in position 333: illegal multibyte sequence
3.2 获取标签
tag = doc("h2")
# 类型:<class 'pyquery.pyquery.PyQuery'>
标签名
.class名
-
#id属性值
参考:CSS 选择器
3.3 元素属性获取attr
# <a href="//www.baidu.com/more/" name="tj_briicon" class="bri" style="display: block;">更多产品</a>
tag_id = tag.attr("name") # 返回tj_briicon
tag_style = tag.attr("style") # 返回 None
# <a href="http://news.baidu.com" name="tj_trnews" class="mnav">新闻</a>
print(tag.attr("id", "s_id")) # 设置id,并返回元素
# <a href="http://news.baidu.com" name="tj_trnews" class="mnav" id="s_id">新闻</a>
注:创建PyQuery对象时,存在部分元素没有获取,原因未知
# 元素属性class的操作
# <a href="http://news.baidu.com" name="tj_trnews" class="mnav" id="s_id">新闻</a>
tag.add_class("hello") # 添加class
print(tag) # <a href="http://news.baidu.com" name="tj_trnews" class="mnav hello" id="s_id">新闻</a>
print(tag.remove_class("hello")) # 删除元素class并返回对应元素
# <a href="http://news.baidu.com" name="tj_trnews" class="mnav" id="s_id">新闻</a>
4. 删除元素
from pyquery import PyQuery
doc = PyQuery("https://www.baidu.com", encoding="utf-8", parser="html")
tag = doc("a") # 选择元素
print(tag)
print("---------------------")
# a:last 选择器,a的最后一个元素
removed_item = doc("a:last").remove() # 删除最后一个a,并返回它
print(removed_item)
print("---------------------")
print(doc("a"))
5. item允许迭代元素
from pyquery import PyQuery
doc = PyQuery("https://www.baidu.com", encoding="utf-8")
# tag = doc("a")
# print(tag)
items = [item.text() for item in doc.items("a")]
print(items)
# ['新闻', 'hao123', '地图', '视频', '贴吧', '登录', '更多产品', '关于百度', 'About Baidu', '使用百度前必读', '意见反馈']
6. DOM操作
追加&前置元素,与jquery类似
tag = doc("a")
tag.append('<a href="http://news.baidu.com" name="tj_trnews" class="mnav">新闻append</a>') # 追加
print(tag)
tag.prepend('<a href="http://news.baidu.com" name="tj_trnews" class="mnav">新闻pre</a>') # 前置元素
image.png
7. filter()方法用于过滤元素
8. 网页请求
PyQuery('http://httpbin.org/post', {'foo': 'bar'}, method='post', verify=True)
网友评论