首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
12.1 Charles 抓包工具的使用
12.2 mitmproxy 抓包工具的使用
12.3 mitmdump 实时抓包处理
12.4 Appium 的使用
12.5 基于 Appium 的 App 爬取实战
12.6 Airtest 的使用
12.7 基于 Airtest 的 App 爬取实战
12.8 手机群控爬取实战
12.9 云手机的使用
13.0 Android 逆向
13.1 jadx 的使用
13.2 JEB 的使用
13.3 Xposed 框架的使用
13.4 基于 Xposed 的爬取实战案例
13.5 Frida 的使用
13.6 SSL Pining 问题的解决方案
13.7 Android 脱壳技术简介与实战
13.8 利用 IDA Pro 静态分析和动态调试 so 文件
13.9 基于 Frida-RPC 模拟执行 so 文件
13.10 基于 AndServer-RPC 模拟执行 so 文件
13.11 基于 unidbg 模拟执行 so 文件
14.1 页面智能解析简介
14.2 详情页智能解析算法简介
14.3 详情页智能解析算法的实现
14.4 列表页智能解析算法简介
14.5 列表页智能解析算法的实现
14.6 如何智能分辨列表页和详情页
15.1 Scrapy框架介绍
15.2 Scrapy入门
15.3 Selector 的使用
15.4 Spider 的使用
15.5 Downloader Middleware的使用
15.6 Spider Middleware的使用
15.7 Item Pipeline的使用
15.8 Extension的使用
15.9 Scrapy 对接 Selenium
15.10 Scrapy 对接 Splash
15.11 Scrapy 对接 Pyppeteer
15.12 Scrapy 规则化爬虫
15.13 Scrapy 实战
16.1 分布式爬虫理念
16.2 Scrapy-Redis原理和源码解析
16.3 基于Scrapy-Redis的分布式爬虫实现
16.4 基于Bloom Filter进行大规模去重
16.5 基于RabbitMQ的分布式爬虫
17.1 Scrapyd和ScrapydAPI的使用
17.2 Scrapyd-Client 的使用
17.3 Gerapy 爬虫管理框架的使用
17.4 将Scrapy 项目打包成 Docker 镜像
17.5 Docker Compose 的使用
17.6 Kubernetes的使用
17.7 用 Kubernetes 部署和管理 Scrapy 爬虫
17.8 Scrapy 分布式爬虫的数据统计方案
17.9 基于Prometheus和Grafana的分布式爬虫监控方案
当前位置:
首页>>
技术小册>>
Python3网络爬虫开发实战(下)
小册名称:Python3网络爬虫开发实战(下)
### 15.3 Selector 的使用 在网络爬虫的开发过程中,数据提取是至关重要的一环。随着网页结构的日益复杂,直接通过字符串操作或正则表达式来提取数据不仅效率低下,而且容易出错。为了更高效地处理HTML或XML文档,并提取出我们所需的数据,Python提供了多种库,其中`lxml`和`parsel`(基于`lxml`)中的`Selector`成为了许多爬虫开发者的首选工具。本章节将详细介绍`Selector`的使用,包括其基本概念、安装配置、基本语法、以及在实际项目中的应用案例。 #### 15.3.1 Selector 简介 `Selector`是一种基于XPath或CSS选择器的数据提取机制,它允许开发者以非常灵活和强大的方式定位并提取HTML或XML文档中的元素。XPath是一种在XML文档中查找信息的语言,它提供了强大的导航和选择能力;而CSS选择器则更为直观,特别是对于熟悉CSS的开发者来说。`Selector`结合了这两种选择器的优点,使得数据提取工作变得既高效又便捷。 #### 15.3.2 安装与配置 在使用`Selector`之前,你需要确保已经安装了`lxml`库。`lxml`是一个功能强大的库,用于解析和生成XML和HTML文档。它提供了比Python标准库`xml.etree.ElementTree`更丰富的功能和更快的解析速度。 ```bash pip install lxml ``` 如果你选择使用`parsel`,这是一个构建在`lxml`之上的库,提供了更高级别的API来与XPath和CSS选择器交互,你也可以通过pip安装它: ```bash pip install parsel ``` #### 15.3.3 Selector 基本语法 ##### XPath 语法 XPath使用路径表达式来选取XML文档中的节点或节点集。以下是一些基本示例: - `/root/child`:选取根元素root的子元素child。 - `//tagname`:选取文档中所有的tagname元素,无论它们位于文档的什么位置。 - `*`:匹配任何元素节点。 - `@attribute`:选取元素的属性。 ##### CSS 选择器语法 CSS选择器用于选择HTML文档中的元素。以下是一些基本示例: - `tagname`:选择所有tagname元素。 - `.classname`:选择所有class属性包含classname的元素。 - `#idname`:选择id属性等于idname的元素。 - `tagname[attribute="value"]`:选择具有特定属性及值的tagname元素。 #### 15.3.4 使用 Selector 提取数据 以下是一个使用`parsel`库中`Selector`对象提取网页数据的简单示例。假设我们有一个简单的HTML文档,需要从中提取所有链接的文本和href属性。 ```python from parsel import Selector html_doc = """ <html> <head><title>测试页面</title></head> <body> <p>这是一个段落。</p> <a href="http://example.com/1" class="link">链接1</a> <a href="http://example.com/2" class="link">链接2</a> </body> </html> """ selector = Selector(text=html_doc) # 使用XPath提取链接文本 links_text = selector.xpath('//a/text()').getall() print("链接文本:", links_text) # 使用CSS选择器提取链接的href属性 links_href = selector.css('a::attr(href)').getall() print("链接的href:", links_href) ``` 在这个例子中,我们首先创建了一个`Selector`对象,并传入HTML文档作为文本。然后,我们使用XPath和CSS选择器分别提取了所有`<a>`标签的文本内容和href属性。`.getall()`方法用于获取所有匹配的结果,而不仅仅是第一个。 #### 15.3.5 实战案例:爬取网页新闻标题 假设我们需要从一个新闻网站爬取所有新闻的标题。首先,我们需要分析目标网页的结构,确定新闻标题所在的HTML元素及其属性或类名。以下是一个简化的示例流程: 1. **网页分析**:使用浏览器的开发者工具查看新闻标题的HTML结构,假设标题被包裹在`<h2 class="news-title">`标签中。 2. **编写爬虫**: ```python import requests from parsel import Selector url = 'http://example.com/news' response = requests.get(url) response.raise_for_status() # 抛出异常如果请求失败 selector = Selector(text=response.text) # 提取所有新闻标题 news_titles = selector.css('h2.news-title::text').getall() for title in news_titles: print(title) ``` 3. **处理异常与数据清洗**:在实际应用中,你可能需要处理网络请求异常、数据格式不一致等问题,并进行必要的数据清洗和格式化。 4. **数据存储**:将提取的数据保存到数据库、文件或其他存储系统中,以便后续分析和使用。 #### 15.3.6 总结 `Selector`作为一种高效的数据提取工具,在网络爬虫开发中扮演着重要角色。通过熟练掌握XPath和CSS选择器的语法,并灵活运用`lxml`或`parsel`库中的`Selector`对象,我们可以轻松地从复杂的HTML或XML文档中提取出所需的数据。此外,随着Web技术的不断发展,了解并适应新的数据提取技术和方法也是非常重要的。希望本章节的内容能够帮助你更好地理解和应用`Selector`,在Python网络爬虫开发的道路上越走越远。
上一篇:
15.2 Scrapy入门
下一篇:
15.4 Spider 的使用
该分类下的相关小册推荐:
Python合辑3-字符串用法深度总结
Python合辑12-面向对象
实战Python网络爬虫
Python编程轻松进阶(一)
机器学习算法原理与实战
Python编程轻松进阶(三)
Python合辑9-判断和循环
Python与办公-玩转PPT
Python合辑14-面向对象编程案例(下)
Python合辑13-面向对象编程案例(上)
Python编程轻松进阶(四)
Python合辑10-函数