首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
1.1 HTTP基本原理
1.2 Web 网页基础
1.3 爬虫的基本原理
1.4 Session和Cookie
1.5 代理的基本原理
1.6 多线程和多进程的基本原理
2.1 urllib的使用
2.2 requests的使用
2.3 正则表达式
2.4 httpx的使用
2.5 基础爬虫案例实战
3.1 XPath的使用
3.2 Beautiful Soup的使用
3.3 pyquery的使用
3.4 parsel 的使用
4.1 TXT 文本文件存储
4.2 JSON 文件存储
4.3 CSV 文件存储
4.4 MySQL 存储
4.5 MongoDB 文档存储
4.6 Redis缓存存储
4.7 Elasticsearch 搜索引擎存储
4.8 RabbitMQ 的使用
5.1 什么是 Ajax
5.2 Ajax分析方法
5.3 Ajax 分析与爬取实战
6.1 协程的基本原理
6.2 aiohttp的使用
6.3 aiohttp 异步爬取实战
7.1 Selenium 的使用
7.2 Splash 的使用
7.3 Pyppeteer 的使用
7.4 Playwright 的使用
7.5 Selenium 爬取实战
7.6 Pyppeteer 爬取实战
7.7 CSS 位置偏移反爬案例分析与爬取实战
7.8 字体反爬案例分析与爬取实战
8.1 使用 OCR 技术识别图形验证码
8.2 使用 OpenCV 识别滑动验证码的缺口
8.3 使用深度学习识别图形验证码
8.4 使用深度学习识别滑动验证码的缺口
8.5 使用打码平台识别验证码
8.6 手机验证码的自动化处理
9.1 代理的设置
9.2 代理池的维护
9.3 付费代理的使用
9.4 ADSL 拨号代理的搭建方法
9.5 代理反爬案例爬取实战
10.1 模拟登录的基本原理
10.2 基于Session和Cookie的模拟登录爬取实战
10.3 基于JWT的模拟登录爬取实战
10.4 大规模账号池的搭建
11.1 网站加密和混淆技术简介
11.2 浏览器调试常用技巧
11.3 JavaScript Hook 的使用
11.4 无限 debugger 的原理与绕过
11.5 使用 Python 模拟执行 JavaScript
11.6 使用 Node.js 模拟执行 JavaScript
11.7 浏览器环境下 JavaScript 的模拟执行
11.8 AST 技术简介
11.9 使用 AST 技术还原混淆代码
11.10 特殊混淆案例的还原
11.11 WebAssembly 案例分析和爬取实战
11.12 JavaScript 逆向技巧总结
11.13 JavaScript 逆向爬取实战
当前位置:
首页>>
技术小册>>
Python3网络爬虫开发实战(上)
小册名称:Python3网络爬虫开发实战(上)
### 3.3 pyquery的使用 在Python的网络爬虫开发领域,除了常用的`requests`库用于发送HTTP请求外,`BeautifulSoup`和`lxml`等库因其强大的HTML/XML解析能力而备受青睐。然而,对于习惯使用jQuery风格的开发者来说,`pyquery`无疑是一个更加友好且高效的选择。`pyquery`是一个基于`lxml`的库,它允许你使用类似于jQuery的语法来解析HTML文档,极大地简化了DOM操作和提取数据的过程。 #### 3.3.1 pyquery简介 `pyquery`的设计灵感来源于jQuery,使得Python开发者能够使用熟悉的选择器语法来操作HTML文档。它不仅易于上手,而且性能卓越,特别适合用于处理复杂的网页抓取任务。安装`pyquery`非常简单,只需通过pip即可完成: ```bash pip install pyquery ``` #### 3.3.2 基本使用 ##### 3.3.2.1 初始化pyquery对象 使用`pyquery`的第一步是创建一个`PyQuery`对象,这个对象可以是一个字符串、URL、文件对象或者已经是一个`lxml`的元素。以下是一些初始化`PyQuery`对象的示例: ```python from pyquery import PyQuery as pq # 从字符串初始化 html_content = """ <html> <head><title>Test Page</title></head> <body> <h1>Hello, pyquery!</h1> <p class="description">This is a test page.</p> </body> </html> """ doc = pq(html_content) # 从URL加载(需先发送请求获取HTML内容) # import requests # url = 'http://example.com' # r = requests.get(url) # doc = pq(r.text) # 从文件加载 # with open('example.html', 'r', encoding='utf-8') as f: # doc = pq(f) ``` ##### 3.3.2.2 选择器语法 `pyquery`支持多种选择器语法,包括但不限于CSS选择器、XPath等。以下是一些常用的选择器示例: - **ID选择器**: ```python # 选中ID为"header"的元素 header = doc('#header') ``` - **类选择器**: ```python # 选中所有class为"description"的<p>元素 descriptions = doc('p.description') ``` - **属性选择器**: ```python # 选中所有带有href属性的<a>元素 links = doc('a[href]') ``` - **后代选择器**: ```python # 选中<body>内所有的<p>元素 body_ps = doc('body p') ``` - **子选择器**: ```python # 选中<body>的直接子<p>元素 body_direct_ps = doc('body > p') ``` - **伪类选择器**(有限支持): 虽然`pyquery`不完全支持所有jQuery的伪类选择器,但常用的一些如`:first`、`:last`、`:eq(index)`等是支持的。 ```python # 选中第一个<p>元素 first_p = doc('p:first') # 选中索引为2的<p>元素(注意索引从0开始) third_p = doc('p:eq(2)') ``` ##### 3.3.2.3 遍历与查找 一旦你通过选择器获取到了元素集合,就可以使用`.items()`方法进行遍历,或者使用`.find()`、`.children()`、`.siblings()`等方法进一步查找元素。 ```python # 遍历所有class为"description"的<p>元素 for desc in doc('p.description').items(): print(desc.text()) # 查找所有<p>元素下的<a>标签 p_links = doc('p').find('a') ``` ##### 3.3.2.4 修改与删除 虽然在网络爬虫场景中,直接修改HTML内容的需求较少,但`pyquery`仍提供了`.attr()`、`.text()`、`.remove()`等方法用于修改或删除元素。 ```python # 修改第一个<p>元素的文本内容 doc('p:first').text('New content') # 删除所有class为"hidden"的元素 doc('.hidden').remove() ``` #### 3.3.3 进阶应用 ##### 3.3.3.1 处理复杂页面 对于包含JavaScript动态生成内容的网页,直接使用`pyquery`可能无法直接获取到最终渲染的HTML。这时,可以考虑使用Selenium等工具来模拟浏览器行为,获取完整渲染后的页面源码,再交由`pyquery`处理。 ##### 3.3.3.2 链式调用 `pyquery`支持链式调用,使得代码更加简洁易读。你可以将多个选择器或方法连续调用,以实现复杂的DOM操作。 ```python # 选中<body>下第一个<div>内所有class为"highlight"的<p>元素,并获取其文本内容 texts = doc('body div:first .highlight p').text() ``` ##### 3.3.3.3 结合正则表达式 在某些情况下,可能需要结合正则表达式来进一步处理文本数据。虽然`pyquery`本身不直接支持正则表达式,但你可以先将文本内容提取出来,再使用Python的`re`模块进行处理。 ```python import re # 提取所有<a>标签的href属性值,并使用正则表达式提取其中的特定部分 hrefs = [a.attr('href') for a in doc('a[href]').items()] filtered_hrefs = [re.search(r'https://(.*?)/', href).group(1) if href else '' for href in hrefs] ``` #### 3.3.4 总结 `pyquery`以其类似jQuery的语法和强大的功能,在Python网络爬虫开发中占据了一席之地。通过本章的学习,我们了解了`pyquery`的基本使用方法,包括初始化`PyQuery`对象、使用选择器语法选取元素、遍历与查找元素、修改与删除元素等。此外,我们还探讨了`pyquery`在处理复杂页面、链式调用以及结合正则表达式等方面的进阶应用。掌握`pyquery`,将使你在编写网络爬虫时更加得心应手。
上一篇:
3.2 Beautiful Soup的使用
下一篇:
3.4 parsel 的使用
该分类下的相关小册推荐:
Python合辑10-函数
Python合辑6-字典专题
Python数据分析与挖掘实战(上)
Python合辑4-130个字符串操作示例
Python爬虫入门与实战开发(上)
Python机器学习实战
Python与办公-玩转Excel
Python面试指南
Python机器学习基础教程(下)
Python合辑9-判断和循环
Python数据分析与挖掘实战(下)
Python编程轻松进阶(一)