网页爬虫就像钓鱼,有了Scrapy这个鱼竿,更重要的是学会CSS选择器这个鱼饵的制作方法。
一、CSS选择器:爬虫工程师的“瞄准镜”
1.1 什么是CSS选择器?
简单来说,CSS选择器就像是给网页元素贴标签的工具,告诉浏览器如何找到特定的元素并应用样式。而在爬虫中,我们借用这套规则来定位和提取数据。
Scrapy中的选择器是基于lxml库构建的,解析速度非常快,比BeautifulSoup快不少。当你需要快速抓取大量数据时,这个速度优势会非常明显。
1.2 为什么选择CSS选择器而不是XPath?
很多新手会纠结学XPath还是CSS选择器,我的建议是:都学,但先从CSS开始。原因很简单:
- 语法更简洁:如果你有前端基础,CSS选择器会非常亲切
- 更易读写:
response.css('div.title')比response.xpath('//div[@class="title"]')更简短 - 前端友好:可以直接借用浏览器中看到的CSS类名和ID
Scrapy官方文档也指出,选择器自动使用HTML解析器,并且确保响应主体只解析一次,这让代码更高效。
二、Scrapy选择器基础:你的第一个选择器
2.1 准备工作
在开始之前,确保你已经安装了Scrapy。如果还没安装,可以使用pip:
pip install scrapy
2.2 选择器的基本使用
在Scrapy中,你有几种方式创建和使用选择器:
# 方法1:直接使用response的快捷方式
title = response.css('title::text').get()
# 方法2:通过selector属性
title = response.selector.css('title::text').get()
# 方法3:手动创建选择器
from scrapy.selector import Selector
body = '<html><body><span>good</span></body></html>'
selector = Selector(text=body)
title = selector.css('title::text').get()
推荐使用第一种方法,因为它最简洁,而且能确保响应只被解析一次。
2.3 提取内容的基本方法
提取数据时,你有几个重要的方法:
.get():提取第一个匹配元素的内容,没有匹配时返回None.getall():提取所有匹配元素的内容,返回列表.extract():.getall()的别名,功能相同
# 提取第一个标题
first_title = response.css('h1::text').get()
# 提取所有标题
all_titles = response.css('h1::text').getall()
# 当元素不存在时提供默认值
title = response.css('h1::text').get(default='默认标题')
三、CSS选择器语法大全:从菜鸟到专家
CSS选择器的语法内容丰富,让我们通过表格和实例来全面掌握。
3.1 基础选择器
这些是你最常用到的选择器,掌握它们就能解决80%的问题:

最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



