当前位置: 首页 > news >正文

Python 爬虫(五):PyQuery 框架

目录
  • 1 准备工作
      • 1.1 安装
      • 1.2 初始化
  • 2 快速上手
      • 2.1 基本使用
      • 2.2 伪类选择器

PyQuery 是仿照 jQuery 实现的,语法与 jQuery 几乎完全相同,如果你熟悉 jQuery,又不想再记一套 BeautifulSoup (Python 爬虫(三):BeautifulSoup 库) 的调用方法,那么 PyQuery 是一个很好的选择。

1 准备工作

1.1 安装

使用如下终端命令安装

pip install pyquery

安装完成后导包

from pyquery import PyQuery as pq

1.2 初始化

传入字符串

from pyquery import PyQuery as pqhtml = '''
<html><head><title>Hello PyQuery</title></head><body><ul id="container"><li class="l1">l1</li><li class="l2">l2</li><li class="l3">l3</li></ul></body>
</html>
'''
doc = pq(html)
print(type(doc))
print(doc)

传入文件

from pyquery import PyQuery as pqdoc= pq(filename='p.html')
print(type(doc))
print(doc)

传入 lxml.etree

from pyquery import PyQuery as pq
from lxml import etreedoc = pq(etree.fromstring('<html><title>Hello PyQuery</title></html>'))
print(type(doc))
print(doc)

传入 URL

from pyquery import PyQuery as pq
doc = pq('http://www.baidu.com')
print(type(doc))
print(doc)

2 快速上手

2.1 基本使用

获取元素

首先,我们使用 PyQuery 的 CSS 选择器获取指定元素。示例如下:

from pyquery import PyQuery as pqhtml = '''
<html><head><title>Hello PyQuery</title></head><body><ul id="container"><li class="l1">l1</li><li class="l2">l2</li><li class="l3">l3</li></ul></body>
</html>
'''
doc = pq(html)
# 获取 ul
ul = doc('#container')
# 获取 li
li = doc('ul li')
print(ul)
print(li)

遍历元素

from pyquery import PyQuery as pqhtml = '''
<html><head><title>Hello PyQuery</title></head><body><ul id="container"><li class="l1">l1</li><li class="l2">l2</li><li class="l3">l3</li></ul></body>
</html>
'''
doc = pq(html)
# 遍历 li
lis =doc('li').items()
for li in lis:print(li)

存在多个相同元素时,获取指定元素

from pyquery import PyQuery as pqhtml = '''
<html><head><title>Hello PyQuery</title></head><body><ul id="container"><li class="l1">l1</li><li class="l2">l2</li><li class="l3">l3</li></ul></body>
</html>
'''
doc = pq(html)
lis =doc('li').items()
# 获取第二个 li
l2 = list(lis)[1]
print(l2)

获取父、子、兄弟元素

PyQuery 可以通过方法直接获取指定元素的父、子、兄弟元素。示例如下:

from pyquery import PyQuery as pqhtml = '''
<html><head><title>Hello PyQuery</title></head><body><ul></ul><ul id="container"><li class="l1">l1</li><li class="l2">l2</li><li class="l3">l3</li></ul><ul></ul></body>
</html>
'''
doc = pq(html)
ul = doc('#container')
l2 = doc('#container .l2')
# 获取 ul 父元素
ul_parent = ul.parent()
# 获取 ul 子元素
ul_child = ul.children()
# 获取第二个 li 兄弟元素
l2_sib = l2.siblings()
print(ul_parent)
print(ul_child)
print(l2_sib)

获取属性、文本信息

from pyquery import PyQuery as pqhtml = '''
<html><head><title name='title'>Hello PyQuery</title></head>
</html>
'''
doc = pq(html)
title =doc('title')
# 获取 name 属性
print(title.attr('name'))
# 获取 title 标签文本信息
print(title.text())

获取 html

from pyquery import PyQuery as pqhtml = '''
<html><head><title>Hello PyQuery</title></head><body><ul id="container"><li class="l1">l1</li><li class="l2">l2</li><li class="l3">l3</li></ul></body>
</html>
'''
doc = pq(html)
# 获取 ul 中 html
ul =doc('ul')
print(ul.html())
2.2 伪类选择器

伪类可以根据一个元素的特征进行分类,下面通过示例了解下伪类选择器的使用。

from pyquery import PyQuery as pqhtml = '''
<html><head><title>Hello PyQuery</title></head><body><ul id="container"><li class="l1">l1</li><li class="l2">l2</li><li class="l3">l3last</li></ul></body>
</html>
'''
doc = pq(html)
# 设置起始位置
lis = doc('li:gt(-1)')
# 获取第一个 li
fli = doc('li:first-child')
# 获取最后一个 li
lli = doc('li:last-child')
# 获取指定 li
l2 = doc('li:nth-child(2)')
# 获取包含 last 的 li
cli = doc('li:contains("last")')
print(lis)
print(fli)
print(lli)
print(l2)
print(cli)
http://www.lryc.cn/news/599766.html

相关文章:

  • Gin 框架的中间件机制
  • 【世纪龙科技】新能源汽车电驱动总成装调与检修仿真教学软件
  • PHP:从入门到实践——构建现代Web应用的利器
  • 【STM32项目】有毒气体监测
  • VUE懒加载(4种方式)
  • 【Android】桌面小组件开发
  • Java设计模式-建造者模式
  • Tomcat线程池深度优化指南:高并发场景下的maxConnections计算与监控体系
  • iOS 加固工具实战解析,主流平台审核机制与工具应对策略
  • iOS WebView 调试实战,文件上传与权限弹窗异常的排查路径
  • Win11批量部署神器winget
  • 【通识】算法案例
  • Python--文件操作
  • MYSQL高可用集群搭建--docker
  • Kingbasepostgis 安装实践
  • 电子电气架构 --- 车载软件与样件产品交付的方法
  • 华为昇腾NPU卡 文生音频[T2A]大模型suno/bark模型推理使用
  • 线性代数 上
  • 旧物回收系统开发:搭建资源再生与环保共赢的桥梁
  • AMD官网下载失败,不让账户登录下载
  • STM32-中断配置教程(寄存器版)
  • 设计模式十:单件模式 (Singleton Pattern)
  • 《设计模式之禅》笔记摘录 - 10.装饰模式
  • 一道检验编码能力的字符串的题目
  • C# WPF 实现读取文件夹中的PDF并显示其页数
  • 《Angular+Spring Boot:ERP前端采购销售库存协同架构解析》
  • Qt 数据库事务处理与数据安全
  • Orbbec开发---数据流与数据流操作
  • 输电线路观冰精灵在线监测装置:科技赋能电网安全的新利器
  • 智慧灯杆:不止于照明,塔能科技的城市感知网络野心