美文网首页
py3笔记15:pyquery模块

py3笔记15:pyquery模块

作者: _百草_ | 来源:发表于2022-06-28 13:55 被阅读0次

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'>

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)

参考

  1. Python pyquery
  2. Python 爬虫利器六之PyQuery
  3. python爬虫从入门到放弃(七)之PyQuery库的使用
  4. pyquery的用法

相关文章

网友评论

      本文标题:py3笔记15:pyquery模块

      本文链接:https://www.haomeiwen.com/subject/gxtiiltx.html