必须严格按顺序执行创建项目、定义爬虫、编写解析逻辑、运行命令四步,漏掉任一环节都会导致命令报错或无输出;其中项目名不能含下划线或大写字母,allowed_domains必须是纯域名,parse中需用yield返回数据,导出文件存在即表示成功。

用Scrapy命令行完成一次完整抓取,必须严格按顺序执行创建项目、定义爬虫、编写解析逻辑、运行命令四步,漏掉任一环节都会导致命令报错或无输出。
创建Scrapy项目
在终端中进入你希望存放项目的目录,执行:
scrapy startproject mycrawler
这会生成一个名为mycrawler的文件夹,内部包含scrapy.cfg和同名模块目录。注意:项目名不能含下划线或大写字母,否则后续命令可能无法识别模块路径。
进入项目根目录:
cd mycrawler
生成Spider文件
在项目根目录下运行:
scrapy genspider example quotes.toscrape.com
该命令会在spiders/子目录中创建example.py,自动填充name、allowed_domains和start_urls三个关键属性。域名必须写对,【allowed_domains必须是纯域名,不能带http://或路径】,否则爬虫启动后会过滤所有请求,返回0条响应。
此时不要急着改代码——先确认文件已生成,再打开编辑。
编写parse解析逻辑
打开spiders/example.py,在parse方法中补全数据提取代码:
将原pass语句替换为:
for quote in response.css('div.quote'):
yield {
'text': quote.css('span.text::text').get(),
'author': quote.css('small.author::text').get(),
'tags': quote.css('div.tags a.tag::text').getall()
}
这段代码使用CSS选择器从quotes.toscrape.com首页提取每条名言的文本、作者和标签。注意get()返回单个值,getall()返回列表,混用会导致字段类型不一致。
如果想翻页,可在循环后加:
next_page = response.css('li.next a::attr(href)').get()
if next_page:
yield response.follow(next_page)
命令行运行并导出结果
方法一:直接运行爬虫并保存为JSON文件
scrapy crawl example -o quotes.json
方法二:只看控制台输出(调试用)
scrapy crawl example
方法三:导出为CSV(字段需完全一致,否则会错位)
scrapy crawl example -o quotes.csv
运行后,当前目录下立即生成quotes.json。文件存在即表示抓取成功;若为空文件,检查parse中是否漏写了yield,或response.css选择器是否匹配到元素。











