pyquery是一个相对新颖的数据解析方式,有别于xpath和bs4。
它是使用css选择器作为语法规则的一种解析方式,其用法几乎和前端的jQuery库一致。
安装
pip install pyquery
基本用法
from pyquery import PyQuery as pq
html = '<li><a href="http://www.baidu.com">百度</a></li>'
# 加载HTML代码, 此时会自动生成PyQuery对象
query = pq(html)
print(query) # <li><a href="http://www.baidu.com">百度</a></li>
print(type(query)) # <class'pyquery.pyquery.PyQuery'>
# 从PyQuery对象中提取内容
# 1. 标签选择器
li = query("li")
print(li) # li标签
# 2. id选择器
a = query("#god")
print(a)
# 3. 类选择器
btn = query(".btn")
print(btn)
# 注意, 通过pyquery选择器提取的节点, 依然是pyquery对象. 所以. 就有了这种写法
# 4. 链式提取
btn = query("li")("a") # 先提取li, 然后再提取a.
print(btn)
# 但这种写法个⼈极不推荐. 看着很不舒服. 舒服的写法一定是这样的
# 5. 后代选择器
btn = query("li a") # 直接使用css选择器搞就完了.
print(btn)
# 提取这些重要属性试试看
# 6. 属性提取
下面方法的提取,如果有多个结果,默认只返回第一个结果。
btn = query("a")
print(btn.attr("href")) # 提取href属性. attr()的作用就提取属性
print(btn.text()) # 提取a标签的文本信息
print(btn.html()) # 提取a标签中的html信息
# 单一标签的数据提取我们了解完了. 接下来, 如果是批量的数据如何提取呢?
query = PyQuery(html)
# 插播一条根据属性提取数据
# feiji = query("a[@href='feiji']")
# print(feiji)
# 拿到所有的a标签
lis = query("li a")
a_list = lis.items() # 批量数据处理必须加上items()
for a in a_list:
print(a.text())
pyquery还可以对HTML结构进行修改
from pyquery import PyQuery as pq
html = """
<HTML>
<div class="aaa">哒哒哒</div>
<div class="bbb">嘟嘟嘟</div>
</HTML>
"""
doc = pq(html)
doc(".aaa").after("""<div class="ccc">妈呀</div>""") # 在后面插入HTML代码片段
doc(".bbb").append("<span>我爱span</span>") # 向HTML内层标签中插入HTML片段
doc(".aaa").html("<span>我是span</span>") # 修改标签内的html代码
doc('.ccc').text("美滋滋") # 修改文本内容
doc(".ccc").attr("cs", "测试") # 添加属性
doc(".ccc").remove_attr("cs") # 删除属性
print(doc)