Scrapy1.4最新官方文档总结 1 介绍·安装安装

2018-04-24 10:29:21 浏览数 (1)

《Learning Scrapy》这本书是2016年1月出版的,作者使用的版本是Scrapy 1.0.3。

现在,Scrapy的最新版本是1.4。

Scrapy的图标是个小刮铲 :)

Scrapy文档的中文版现在还是1.0的:http://scrapy-chs.readthedocs.io/zh_CN/latest/intro/tutorial.html。

官方文档更新自然是最快的:https://docs.scrapy.org/en/latest/intro/tutorial.html。

官方案例现在使用网站http://quotes.toscrape.com作为抓取源。这个网站是GoodReads.com(特别好的书评网站,Kindle用户肯定熟悉)和Scrapinghub合作的。多说一句,Scrapinghub提供了几个有用的产品,如下:

Scrapy Cloud是一个有限免费的云平台,可以部署爬虫进行定时爬取(免费一个并发进程)。Scrapy官网推荐过Scrapy Cloud。

Crawlera是代理插件,《Learning Scrapy》书里用到过,那时还是免费的,现在是收费的了。

最简单的Scrapy例子:

代码语言:javascript复制
import scrapy #命名为quotes_spider.py

class QuotesSpider(scrapy.Spider):
    name = "quotes"
    start_urls = [
        'http://quotes.toscrape.com/tag/humor/',
    ]

    def parse(self, response):
        for quote in response.css('div.quote'):
            yield {
                'text': quote.css('span.text::text').extract_first(),
                'author': quote.xpath('span/small/text()').extract_first(),
            }

        next_page = response.css('li.next a::attr("href")').extract_first()
        if next_page is not None:
            yield response.follow(next_page, self.parse)

运行这个爬虫,输出为json格式:

代码语言:javascript复制
scrapy runspider quotes_spider.py -o quotes.json

会得到一个quotes.json文件,如下:

爬取步骤分析:

1向start_urls发出请求,将响应作为参数传递给调回方法parse;

2 用CSS选择器循环抓取名人名言。寻找下一页的链接,规划下一个请求。

可以看出Scrapy的优点:请求是经过规划,然后异步执行的。所以,Scrapy不用等待请求完成,就可以发出另一个请求。如果某个请求受阻,其它请求仍然可以执行。

这样的话,Scrapy爬取的速度就可以很快。控制爬取速度,可以通过设置两个请求的间隔时间、设置域名或ip的并发请求数、或使用自动阻塞插件(AutoThrottle extension)。

Scrapy的其它特点:

  • 内建的CSS选择器和XPath表达式
  • 基于IPython交互式shell,方便编写爬虫和debug
  • 内建的文件导出和保存方法,格式多样JSON、CSV、XML
  • 健壮的编码支持
  • 扩展性强,可以使用signals和API(中间件、插件、管道)添加自定义功能
  • 多种用于处理session、cookies、HTTP认证、user-agent、robots.txt、抓取深度限制的中间件和插件
  • Scrapy内建Telnet console,可用于debug

安装

Scrapy现在支持Python 2.7 和 Python 3.3以上的版本。最方便的就是用pip安装:

代码语言:javascript复制
pip install Scrapy

如果用的是Anaconda环境,官网还介绍了conda安装方法:

代码语言:javascript复制
conda install -c conda-forge scrapy

官方推荐的是使用虚拟环境,这样可以减少冲突,使用gitbash(这里使用win7的shell不能正常deactivate,使用gitbash没问题):

代码语言:javascript复制
pip install virtualenv

新建一个虚拟环境:

代码语言:javascript复制
virtualenv test1

激活这个虚拟环境:

代码语言:javascript复制
source activate test1

这时再安装Scrapy:

代码语言:javascript复制
pip install Scrapy

安装的包就存储在 ..test1Libsite-packages中了。

退出这个环境:

代码语言:javascript复制
source deactivate

0 人点赞