scrapy学习笔记

551 查看

scrapy是python最有名的爬虫框架之一,可以很方便的进行web抓取,并且提供了很强的定制型,这里记录简单学习的过程和在实际应用中会遇到的一些常见问题

一、安装

在安装scrapy之前有一些依赖需要安装,否则可能会安装失败,scrapy的选择器依赖于lxml,还有Twisted网络引擎,下面是ubuntu下安装的过程

1. linux下安装

http://lxml.de/installation.html

2. Mac下安装

mac下安装有时候会失败,建议使用virtualenv安装在独立的环境下,可以减少一些问题,因为mac系统自带python,例如一些依赖库依赖的一些新的版本,而升级新版本会把旧版本卸载掉,卸载可能会有权限的问题

二、基本使用

1. 初始化scrapy项目

我们可以使用命令行初始化一个项目

这里可以查看scrapy更多其他的命令

初始化完成后,我们得到下面目录结构

我们先看一下scrapy的处理流程

scrapy由下面几个部分组成

  • spiders:爬虫模块,负责配置需要爬取的数据和爬取规则,以及解析结构化数据
  • items:定义我们需要的结构化数据,使用相当于dict
  • pipelines:管道模块,处理spider模块分析好的结构化数据,如保存入库等
  • middlewares:中间件,相当于钩子,可以对爬取前后做预处理,如修改请求header,url过滤等

我们先来看一个例子,在spiders目录下新建一个模块DmozSpider.py

打开终端进入根目录,执行下面命令

爬虫开始爬取start_urls定义的url,并输出到文件中,最后输出爬去报告,会输出爬取得统计结果

这里我们完成了简单的爬取和保存的操作,会在根目录生成两个文件ResourcesBooks

2. 通过代码运行爬虫

每次进入控制台运行爬虫还是比较麻烦的,而且不好调试,我们可以通过CrawlerProcess通过代码运行爬虫,新建一个模块run.py

参考:http://doc.scrapy.org/en/latest/topics/practices.html#run-scrapy-from-a-script

三、Scrapy类

如上面的DmozSpider类,爬虫类继承自scrapy.Spider,用于构造Request对象给Scheduler

1. 常用属性与方法

属性

  • name:爬虫的名字,必须唯一(如果在控制台使用的话,必须配置)
  • start_urls:爬虫初始爬取的链接列表
  • parse:response结果处理函数
  • custom_settings:自定义配置,覆盖settings.py中的默认配置

方法

  • start_requests:启动爬虫的时候调用,默认是调用make_requests_from_url方法爬取start_urls的链接,可以在这个方法里面定制,如果重写了该方法,start_urls默认将不会被使用,可以在这个方法里面定制一些自定义的url,如登录,从数据库读取url等,本方法返回Request对象
  • make_requests_from_url:默认由start_requests调用,可以配置Request对象,返回Request对象
  • parse:response到达spider的时候默认调用,如果在Request对象配置了callback函数,则不会调用,parse方法可以迭代返回ItemRequest对象,如果返回Request对象,则会进行增量爬取

2. Request与Response对象

每个请求都是一个Request对象,Request对象定义了请求的相关信息(url, method, headers, body, cookie, priority)和回调的相关信息(meta, callback, dont_filter, errback),通常由spider迭代返回

其中meta相当于附加变量,可以在请求完成后通过response.meta访问

请求完成后,会通过Response对象发送给spider处理,常用属性有(url, status, headers, body, request, meta, )

详细介绍参考官网

看下面这个例子