学习 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 创建的项目,概念上不要过于执着于就是针对一个数据源的网站进行抓取,而是要当成你自己的爬虫项目,即可能数据源来自不同的网站。

-- 待续 --


参考资料

赞赏