py3笔记15:pyquery模块

2022-06-28  本文已影响0人  _百草_

1. 简介


2. 安装

pip install pyquery


3. 简单使用

3.1 创建对象

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

doc = PyQuery("https://www.baidu.com", encoding="utf-8")  # 添加encoding,避免中文乱码
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的用法
上一篇 下一篇

猜你喜欢

热点阅读