Scrapy 安装、创建和运行
Scrapy 爬虫框架可以在 Python2、Python3 的版本上运行。建议使用 Python 3.6.0 以上版本。本章将介绍 Scrapy 爬虫框架的安装、项目创建和运行。
1. 安装
我们可以简单地通过 pip 安装 Scrapy 框架及其依赖:
$ pip install scrapy
2. 创建项目
Scrapy 安装后,可以通过 Scrapy 命令创建一个爬虫项目,比如创建项目 tutorial:
scrapy startproject tutorial
项目结构如下:
tutorial/ scrapy.cfg # 部署配置文件 tutorial/ # Python模块,代码写在这个目录下 __init__.py items.py # 数据项定义文件 pipelines.py # 数据项管道文件 settings.py # 项目设置文件 spiders/ # 爬虫(蜘蛛)目录 __init__.py
3. 编写爬虫
我们开始编写第一个爬虫类 QuotesSpider,代码存放到 tutorial/spiders/quotes_spider.py 文件中。
import scrapy class QuotesSpider(scrapy.Spider): name = "quotes" def start_requests(self): urls = [ 'http://quotes.toscrape.com/page/1/', 'http://quotes.toscrape.com/page/2/', ] for url in urls: yield scrapy.Request(url=url, callback=self.parse) def parse(self, response): page = response.url.split("/")[-2] filename = 'quotes-%s.html' % page with open(filename, 'wb') as f: f.write(response.body) self.log('Saved file %s' % filename)
爬虫类 QuotesSpider 说明:
- 爬虫类必须继承 scrapy.Spider。
- name:用来设置爬虫的标识(也称为名字),它在项目中必须是唯一的,不同的 Spider 不能设置相同的名称。
- start_requests():必须返回一个迭代的 Requests,Spider 将按照这些 Requests,依次抓取对应的网页。
- parse():用来处理每个 Request(请求)的响应。其中,response 参数是一个 TextResponse 对象,里面保存了页面内容。TextResponse 类提供了很多用来处理返回数据的方法。parse() 方法不仅用来解析响应,还能提取到新的网址,从而创建新的 Request(请求)。
4. 运行爬虫
进入项目根目录,也就是上面的 tutorial 目录。
cd tutorial
执行爬虫项目:
scrapy crawl quotes
其中的参数 quotes 就是爬虫标识(名字)。
运行结果如下:
... (omitted for brevity) 2016-12-16 21:24:05 [scrapy.core.engine] INFO: Spider opened 2016-12-16 21:24:05 [scrapy.extensions.logstats] INFO: Crawled 0 pages (at 0 pages/min), scraped 0 items (at 0 items/min) 2016-12-16 21:24:05 [scrapy.extensions.telnet] DEBUG: Telnet console listening on 127.0.0.1:6023 2016-12-16 21:24:05 [scrapy.core.engine] DEBUG: Crawled (404) <GET http://quotes.toscrape.com/robots.txt> (referer: None) 2016-12-16 21:24:05 [scrapy.core.engine] DEBUG: Crawled (200) <GET http://quotes.toscrape.com/page/1/> (referer: None) 2016-12-16 21:24:05 [scrapy.core.engine] DEBUG: Crawled (200) <GET http://quotes.toscrape.com/page/2/> (referer: None) 2016-12-16 21:24:05 [quotes] DEBUG: Saved file quotes-1.html 2016-12-16 21:24:05 [quotes] DEBUG: Saved file quotes-2.html 2016-12-16 21:24:05 [scrapy.core.engine] INFO: Closing spider (finished) ...
现在,检查当前目录中的文件。您应该注意到,已经创建了两个新文件:quotes-1.html 和 quotes-2.html。文件里面就是我们编写的爬虫抓取的内容。