创建项目
开始爬取数据之前,你必须先创建一个Scrapy项目。进入你想将项目代码保存的目录,并执行以下代码
MacBook-Pro:scrapy $ scrapy startproject projectname
这会创建一个以projectname命名的文件夹,文件夹中包括一个部署配置文件scrapy.cfg和一个项目的python模块(以projectname命名的另一个文件夹,文件夹下包含一个__init__.py文件)。python模块下包含4个.py文件和一个spiders文件夹,4个.py文件分别是项目的items定义文件items.py,pipelines文件pipelines.py,项目配置文件settings.py和项目中间件文件middlewares.py,spiders文件夹就是将来存在项目所有spiders的地方。Scrapy项目主要的精力就是放在spider的创建上,即我们主要的工作都是在spiders目录下完成的。
接下来让我们看看如何去写第一个spider
一个简单的spider
spider就是我们定义的一个scrapy.Spider的子类。在爬取数据时,scrapy会利用spider去从网页上爬取数据,所以一个最简单的spider必须包含两个部分:1. 最初的请求;2. 如何从请求返回的网页数据中解析需要的数据。另一个可选的部分是如何追踪网页上的链接,即是否要将页面的链接指向的页面也同时爬取或指定部门链接去爬取,可以说这一部分就是实现我们的spider可以爬取整个网站的所有数据而不必把所有链接地址加到第一部分"最初的请求"中的原因。
以下是一个spider的代码
运行spider
在项目的根目录执行以下命令
(scrapyEnv) MacBook-Pro:tutorial $ scrapy crawl quotes
这个命令会运行名字为quotes的spider。
简化start_requests方法
spider第一部分初始的请求start_requests方法也可以使用一个spider的属性start_urls来替代,它是一个包含初始请求地址的list。scrapy会在运行spider时用默认的start_requests方法和list中的地址来创建初始的请求。
以下是代码:
scrapy shell中使用selector获取数据
使用命令scrapy shell [url]启动scrapy shell,url可以指定也可以不指定
(scrapyEnv) MacBook-Pro:tutorial $ scrapy shell "http://quotes.toscrape.com/page/1/" /Users/rossi/.virtualenvs/scrapyEnv/lib/python3.6/site-packages/scrapy/spiderloader.py:37: UserWarning: There are several spiders with the same name: QuotesSpider named 'quotes' (in tutorial.spiders.quotes_spider) QuotesSpider named 'quotes' (in tutorial.spiders.quotes_spider1) QuotesSpider named 'quotes' (in tutorial.spiders.temp) QuotesSpider named 'quotes' (in tutorial.spiders.temp1) This can cause unexpected behavior. warnings.warn(msg, UserWarning) 2017-10-15 21:58:11 [