首页
技术小册
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.1 XPath的使用 在Python网络爬虫的开发中,XPath是一种强大的语言,用于在XML和HTML文档中查找信息。它提供了一种灵活的方式来选择文档的节点或节点集,这对于从网页中提取结构化数据尤为关键。本章节将详细介绍XPath的基本语法、常用函数、以及如何在Python中使用XPath来解析网页内容。 #### 3.1.1 XPath基础 **定义与用途** XPath(XML Path Language)是一种在XML文档中查找信息的语言。尽管它原本是为XML设计的,但由于HTML可以看作是XML的一种非严格形式,因此XPath也被广泛用于处理HTML文档。在爬虫开发中,XPath让我们能够精确地定位并提取网页中的元素,如文本、链接、图片等。 **基本语法** XPath表达式由路径表达式组成,这些表达式通过特定的符号来指定节点之间的关系。以下是一些基本的XPath语法元素: - `/`:根节点。 - `//`:选择文档中的节点,而不考虑它们的位置。 - `.`:当前节点。 - `..`:当前节点的父节点。 - `*`:匹配任何元素节点。 - `@`:用于选择属性,例如`@class`会匹配所有元素的`class`属性。 - `[]`:用于过滤节点,例如`[1]`表示选择第一个节点,`[last()]`表示选择最后一个节点,`[@class='example']`表示选择所有`class`属性为`example`的节点。 **示例** 假设我们有以下HTML片段: ```html <div id="container"> <ul> <li class="item">Item 1</li> <li class="item">Item 2</li> <li class="special">Special Item</li> </ul> </div> ``` - `/div/ul/li`:选择根节点下的第一个`div`元素中的`ul`元素下的所有`li`元素。 - `//li`:选择文档中所有的`li`元素,不论它们的位置。 - `//li[@class='special']`:选择所有`class`属性为`special`的`li`元素。 #### 3.1.2 XPath常用函数 XPath提供了丰富的内置函数,这些函数可以在XPath表达式中直接使用,以增强选择能力。以下是一些常用的XPath函数: - `contains(string1, string2)`:检查`string1`是否包含`string2`。 - `starts-with(string, substring)`:检查字符串是否以某个子字符串开始。 - `ends-with(string, substring)`(注意:这不是XPath 1.0标准的一部分,但在XPath 2.0及更高版本和一些处理器中可用):检查字符串是否以某个子字符串结束。 - `substring(string, start, length)`:从字符串中提取子字符串。 - `concat(string1, string2, ...)`:连接两个或多个字符串。 - `normalize-space(string)`:移除字符串首尾的空白字符,并将中间的多个空白字符替换为单个空格。 **示例** - `//li[contains(@class, 'item')]`:选择所有`class`属性中包含`item`的`li`元素。 - `//li[starts-with(text(), 'Item')]`:选择所有文本内容以`Item`开头的`li`元素。 #### 3.1.3 Python中使用XPath 在Python中,通常结合如lxml或BeautifulSoup这样的库来使用XPath。lxml是一个高效的XML和HTML解析库,它支持XPath表达式,非常适合用于网络爬虫开发。 **安装lxml** 首先,你需要安装lxml库。可以通过pip命令来安装: ```bash pip install lxml ``` **示例代码** 以下是一个使用lxml和XPath来解析HTML并提取数据的示例: ```python from lxml import etree # 假设这是从网页获取的HTML内容 html_content = """ <div id="container"> <ul> <li class="item">Item 1</li> <li class="item">Item 2</li> <li class="special">Special Item</li> </ul> </div> """ # 解析HTML内容 tree = etree.HTML(html_content) # 使用XPath表达式查找元素 items = tree.xpath('//li[contains(@class, "item")]/text()') # 打印结果 for item in items: print(item) # 输出: # Item 1 # Item 2 ``` 在上述示例中,我们首先导入了`etree`模块,然后使用`etree.HTML()`函数将HTML字符串解析为树形结构。之后,我们通过`.xpath()`方法应用XPath表达式来查找所有`class`属性中包含`item`的`li`元素的文本内容,并将结果存储在`items`列表中。最后,我们遍历这个列表并打印出每个项目。 #### 3.1.4 注意事项与最佳实践 - **XPath表达式优化**:编写高效的XPath表达式可以减少解析时间,提高爬虫性能。避免使用过于复杂的表达式,尽量利用文档的结构特点来简化选择。 - **错误处理**:在使用XPath时,可能会遇到元素不存在或XPath表达式错误的情况。因此,添加适当的错误处理逻辑(如try-except块)是很重要的。 - **尊重网站规则**:在编写爬虫时,务必遵守目标网站的`robots.txt`规则和其他使用条款,避免对网站造成不必要的负担或损害。 #### 结论 XPath是Python网络爬虫开发中不可或缺的工具之一,它提供了强大的节点选择能力,使得从HTML文档中提取结构化数据变得简单高效。通过掌握XPath的基本语法、常用函数以及在Python中的使用方法,你可以编写出更加灵活和强大的爬虫程序。同时,注意优化XPath表达式、添加错误处理逻辑,并尊重网站的使用规则,是编写高质量网络爬虫的重要原则。
上一篇:
2.5 基础爬虫案例实战
下一篇:
3.2 Beautiful Soup的使用
该分类下的相关小册推荐:
Python合辑2-字符串常用方法
Python合辑11-闭包函数
Python高并发编程与实战
Python合辑5-格式化字符串
Python机器学习基础教程(下)
Python数据分析与挖掘实战(上)
实战Python网络爬虫
Python与办公-玩转PPT
Python编程轻松进阶(四)
Python合辑13-面向对象编程案例(上)
Python合辑12-面向对象
Python机器学习基础教程(上)