学习 Scrapy on Python - 01 初试牛刀

学着制作爬虫,听说 Python 界里的 Scrapy 是个神器,就尝试着写点试试,学习一下。

首先是安装 Scrapy

我使用的环境是 MacOSX,遇到了一些坑,之后说

建议: 使用 homebrew 并使用 brew 上的 python 进行开发学习

  1. 安装 homebrew (网上的资料大把,我就不再赘述了)
  2. 安装 python 2.7.11 本人用的是这个版本。看你的喜好吧。
    brew install python
  3. 使用 easy_install 安装 pip
    easy_install pip
  4. 然后使用 pip 安装 scrapy 这个步骤中,如果网络访问国外资源不是很好,可以使用国内的源,比如使用豆瓣源
    pip install scrapy
  5. (坑) 通常情况下,scrapy 依赖的 PIL 不会自动安装,需要手工安装。但在 MacOSX 下安装时会遇问题。
pip install PIL
Collecting PIL
  Could not find a version that satisfies the requirement PIL (from versions: )
No matching distribution found for PIL

填坑 ( 解决办法 )

我参考了这篇资料 Mac 安装 PIL

跟着我来一起做 :P

  1. 安装依赖
brew install freetype
ln -s /usr/local/Cellar/freetype/2.6_1/include/freetype2 /usr/local/include/freetype
pip install Pillow --trusted-host mirrors.aliyun.com

注意: 上面的是,用 Pillow 替代了 PIL

  1. 验证 : 直接 python 进入交互状态

执行

from PIL import Image

如果没有报错,就说明 PIL 模块可以正常执行了。

整体架构

引用一张 官方 的图来说明吧

  • 引擎 (Scrapy Engine),用来处理整个系统的数据流处理,触发事务。

  • 调度器 (Scheduler),用来接受引擎发过来的请求,压入队列中,并在引擎再次请求的时候返回。

  • 下载器 (Downloader),用于下载网页内容,并将网页内容返回给蜘蛛。

  • 蜘蛛 (Spiders),蜘蛛是主要干活的,用它来制订特定域名或网页的解析规则。编写用于分析 response 并提取 > item(即获取到的 item) 或额外跟进的 URL 的类。 每个 spider 负责处理一个特定 (或一些) 网站。

  • 项目管道 (Item Pipeline),负责处理有蜘蛛从网页中抽取的项目,他的主要任务是清晰、验证和存储数据。当页面被蜘蛛解析后,将被发送到项目管道,并经过几个特定的次序处理数据。

  • 下载器中间件 (Downloader Middlewares),位于 Scrapy 引擎和下载器之间的钩子框架,主要是处理 Scrapy 引擎与下载器之间的请求及响应。

  • 蜘蛛中间件 (Spider Middlewares),介于 Scrapy 引擎和蜘蛛之间的钩子框架,主要工作是处理蜘蛛的响应输入和请求输出。

  • 调度中间件 (Scheduler Middlewares),介于 Scrapy 引擎和调度之间的中间件,从 Scrapy 引擎发送到调度的请求和响应。

照着网上的例子先写点东西试试

(代码整理之后,会放到 Github 上)

待开发的爬虫

  1. 豆瓣 图书列表
  2. 猎骋 职位信息
  3. 开源中国 的博文、技术文档
  4. 图片大全 的图集

先这些吧

疑问

不知道 Scrapy 是否会对已经抓取的页面内容进行临时缓存

在网上没查到,scrapy 的源码还没来得及看,待观察。

[x] 2016-07-28

可以使用 Enable and configure HTTP caching 配置,来设置本地文件层的缓存。就在 settings.py 文件的最后边,默认是禁用状态。参考手册设置一下即可。

我的理解

  1. Scrapy 的 startproject 创建的项目,概念上不要过于执着于就是针对一个数据源的网站进行抓取,而是要当成你自己的爬虫项目,即可能数据源来自不同的网站。

-- 待续 --


参考资料

赞赏