目录
在网络数据采集领域,Scrapy 框架以其高效、灵活的特性深受开发者青睐。本文将以爬取 4K 美女图片网站为例,详细讲解 Scrapy 中 CrawlSpider 的基础用法,帮助初学者快速掌握全站爬取技巧。
一、CrawlSpider 简介
CrawlSpider 是 Scrapy 提供的一种高级爬虫类,特别适合对整站内容进行爬取。它通过定义爬取规则(Rule),可以自动跟进链接并提取数据,极大简化了爬虫的开发流程。与基础的 Spider 相比,CrawlSpider 更擅长处理具有一定结构的网站,如新闻网站、电商平台等。
二、实战案例:图片网站爬取
以下是本次使用的基础爬虫代码:
from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import CrawlSpider, Rule
class TupianSpider(CrawlSpider):
name = "tupian"
# allowed_domains = ["pic.netbian.com"]
start_urls = ["https://pic.netbian.com/4kmeinv/"]
rules = (
Rule(LinkExtractor(restrict_xpaths=('//*[@id="main"]/div[4]/ul/li')), callback="parse_item", follow=True),
Rule(LinkExtractor(restrict_xpaths=('//*[@id="main"]/div[5]/a')), follow=True) #翻页,不需要回调函数
)
def parse_item(self, response):
item = {}
print(response.xpath('//*[@id="main"]/div[3]/div[1]/div[1]/h1').extract_first())
return item
三、代码解析:核心组件详解
类定义:
TupianSpider继承自CrawlSpider,这是使用 CrawlSpider 的基础。
2.核心属性:
- name:爬虫名称,用于在命令行启动爬虫时使用(如scrapy crawl tupian)。
- start_urls:起始 URL 列表,爬虫从这些 URL 开始爬取。这里设置为 "https://pic.netbian.com/4kmeinv/",即 图片分类页。
- allowed_domains:可选属性,用于限制爬虫只在指定域名下爬取。本例中注释掉该属性,允许爬虫跟进所有相关链接。
3.爬取规则(Rules):
- 规则是 CrawlSpider 的核心,由Rule对象组成的元组。每个Rule定义了一种链接提取和处理方式。
- 第一个规则:LinkExtractor(restrict_xpaths=('//*[@id="main"]/div[4]/ul/li'))表示使用 XPath 提取符合条件的链接,这些链接对应图片详情页。callback="parse_item"指定用parse_item方法处理这些链接的响应,follow=True表示继续跟进该页面中的链接。
- 第二个规则:用于提取翻页链接,follow=True确保爬虫能自动爬取多页内容,由于翻页链接不需要直接提取数据,因此没有指定callback。
4.数据提取方法(parse_item):
该方法用于处理详情页响应,通过 XPath 提取图片标题(//*[@id="main"]/div[3]/div[1]/div[1]/h1)并打印。实际应用中,可根据需求提取更多信息,如图片 URL、发布时间等。
四、运行与调试
保存代码为tupian_spider.py,放入 Scrapy 项目的spiders目录下。
在项目根目录执行命令:scrapy crawl tupian启动爬虫。
观察控制台输出,若能正常打印图片标题,说明爬虫运行成功。
五、常见问题解决
1.链接提取失败
检查 XPath 表达式是否正确,可使用 Scrapy Shell(scrapy shell URL)测试 XPath。
2.爬取范围失
合理设置allowed_domains属性,避免爬虫跳转到无关网站。
3. 重复爬取
Scrapy 默认会过滤重复 URL,无需额外处理。
通过本文的学习,相信你已掌握 CrawlSpider 的基本用法。下一篇文章将深入探讨爬虫的优化技巧,包括反爬处理、数据存储等高级内容。