基础使用
相关命令都是在命令行执行
1.创建项目:scrapy startproject 项目名称 例:scrapy startproject quote_tutorial
2.创建爬虫应用程序:
cd project_name(进入项目目录)例:cd quote_tutorial
scrapy genspider 应用名称 爬取网页的起始url 例:scrapy genspider quotes quotes.toscrape.com
在步骤2执行完毕后,会在项目的spiders中生成一个应用名的py爬虫文件
3.设置修改settings.py配置文件相关配置
4.执行爬虫程序:scrapy crawl 应用名称
5.执行输出指定格式进行存储:将爬取到的数据写入不同格式的文件中进行存储
scrapy crawl qiubai -o qiubai.json
scrapy crawl qiubai -o qiubai.xml
scrapy crawl qiubai -o qiubai.csv
quote_tutorial文件夹内,有一个scrapy.cfg配置文件和quote_tutorial的文件夹
- 第一层[一级quote_tutorial目录]:
- scrapy.cfg:配置文件,不需要更改
- quote_tutorial文件夹:第二层解释
- 第二层[二级quote_tutorial目录]:
- init.py
特定文件,指明二级quote_tutorial目录为一个python模块- item.py:定义需要的item类【实验中需要用到】
- pipeline.py:管道文件,传入item.py中的item类,清理数据,保存或入库
- settings.py:设置文件,例如设置用户代理和初始下载延迟
- spiders目录:第三层解释
- 第三层【spiders目录】
- init.py
特定文件,指明二级first_spider目录为一个python模块
这里是放自定义爬虫的py文件,负责从html中获得数据,传入上一层管道文件中进行数据清理。- quotes.py
主要编码的地方,负责解析文本内容。
下面我们尝试进行项目实战演练:
目标站点:scrapy官方提供的抓取网站,主要是名人名言、作者标签之类的信息
项目的创建
进入命令行,切换到工程文件夹执行:
- scrapy startproject quote_tutorial
- cd quote_tutorial
-
scrapy genspider quotes quotes.toscrape.com
打开pycharm,会发现如下图界面
我们到items.py中建立自己的存储块

分析目标网站




解析代码如下:
def parse(self, response):
quotes = response.css('.quote') # 筛选class = "quote" 的div
for quote in quotes:
text = quote.css('.text::text').extract_first()
# 进一步筛选,'.text::text'输出text文本的内容,extract_first找第一个
author = quote.css('.author::text').extract_first()
# 进一步筛选,'.text::text'输出text文本的内容
tags = quote.css(".tags .tag::text").extract()
# extract把所有结果全部找出来,类似于find和findall的关系
item = QuoteTutorialItem()
item['text'] = text
item['author'] = author
item['tags'] = tags
yield item
#这一块儿代码,对接items.py里的数据结构
#就是建立一个字典 text的内容作为值,‘text’就是键,共同组成键值对
翻页操作

next = response.css('.pager .next a::attr(href)').extract_first() # 查找下一页
url = response.urljoin(next)
#print(next, url , '******************')
yield scrapy.Request(url=url, callback=self.parse)
#callback的意思就是把生成的url,传给谁去解析
整理一下:
def parse(self, response):
quotes = response.css('.quote') # 筛选class = "quote" 的div
for quote in quotes:
text = quote.css('.text::text').extract_first()
# 进一步筛选,'.text::text'输出text文本的内容,extract_first找第一个
author = quote.css('.author::text').extract_first()
# 进一步筛选,'.text::text'输出text文本的内容
tags = quote.css(".tags .tag::text").extract()
# extract把所有结果全部找出来,类似于find和findall的关系
item = QuoteTutorialItem()
item['text'] = text
item['author'] = author
item['tags'] = tags
yield item
#这一块儿代码,对接items.py里的数据结构
#就是建立一个字典 text的内容作为值,‘text’就是键,共同组成键值对
next = response.css('.pager .next a::attr(href)').extract_first() # 查找下一页
url = response.urljoin(next)
#print(next, url , '******************')
yield scrapy.Request(url=url, callback=self.parse)
#callback的意思就是把生成的url,传给谁去解析
运行并存储

这里出现了拼写错误,crawl
运行结果如下:

我们保存为JSON格式

输出结果:


