快捷导航
4 1723

Scrapy入门程序点评

Fuller 于 2016-6-4 15:17 发表 [复制链接]
1,引言

在《Scrapy的架构初探》一文,我基于爬虫开发的经验对Scrapy官网文章作了点评和解读,事件驱动的异步处理架构、极强的模块化等是个绝好的框架,接着我细读了官网的《Scrapy at a glance》,更加强了我的感受:就是他了——GooSeeker的开源Python网络爬虫需要一个爬虫框架,GooSeeker不想重复发明轮子,只想专注于爬虫里面的提取器的生成和使用,也就是Scrapy中的Spider部分。

本文大部分内容摘抄自Scrapy官网的《Scrapy at a glance》,看到Scrapy巧妙之处则加了点评。

2,Scrapy的Spider例子

在Scrapy的框架中,Spider与GooSeeker开源爬虫的提取器类似,核心特征是
  • Spider通常针对一个特定网站
  • Spider里面存了爬行入口URLs集合
  • Scrapy的引擎顺序拿Spider中的入口URL,构造Request对象,启动消息循环
  • Spider提供接口方法,把抓取下来的内容进行输出

对GooSeeker的MS谋数台和DS打数机比较了解的读者,可以把Spider想象成:MS谋数台上定义的一组抓取规则 + 会员中心的爬虫罗盘

下面我们从官网拷贝一个例子:

  1. class StackOverflowSpider(scrapy.Spider):
  2.     name = 'stackoverflow'
  3.     start_urls = ['http://stackoverflow.com/questions?sort=votes']

  4.     def parse(self, response):
  5.         for href in response.css('.question-summary h3 a::attr(href)'):
  6.             full_url = response.urljoin(href.extract())
  7.             yield scrapy.Request(full_url, callback=self.parse_question)

  8.     def parse_question(self, response):
  9.         yield {
  10.             'title': response.css('h1 a::text').extract()[0],
  11.             'votes': response.css('.question .vote-count-post::text').extract()[0],
  12.             'body': response.css('.question .post-text').extract()[0],
  13.             'tags': response.css('.question .post-tag::text').extract(),
  14.             'link': response.url,
  15.         }
复制代码
看这个例子需要注意以下几点
  • start_urls存储入口网址列表,本例只有一个网址
  • parse()函数是爬到了网页后执行的,是由引擎回调的
  • 本来到parse()就完成了,但是这个例子展示了一个两级抓取的案例,在parse()里面构造了下一级抓取的任务,生成Request对象,并登记一个回调函数
  • parse_question()是第二级的解析网页的函数,返回了一个JSON对象
  • 事件驱动模式显而易见,可以构造好多Request,丢给引擎即可,不用阻塞式等待

官网文章还总结了其他很多功能特性,总之,Scrapy是一个十分完善和强大的框架。

3,接下来的工作

至此,Scrapy框架已经明确选定了,接下来,我们将进一步研读Scrapy的文档,研究怎样把GooSeeker的gsExtractor封装成Scrapy需要的Spider

4,文档修改历史
2016-06-04:V1.0,首次发布

举报 使用道具
| 回复

共 4 个关于本帖的回复 最后回复于 2016-6-5 17:20

Fuller 管理员 发表于 2016-6-4 20:42:41 | 显示全部楼层
根据Scrapy官网(http://doc.scrapy.org/en/latest/intro/install.html ),Scrapy支持Python 2.7,是否稍感遗憾?

倒是Python 2.7 刚好是GooSeeker网络爬虫DS打数机的编译环境
举报 使用道具
gz51837844 管理员 发表于 2016-6-5 16:44:59 | 显示全部楼层
现在的Scrapy1.1对python3是beta支持
举报 使用道具
gz51837844 管理员 发表于 2016-6-5 16:46:18 | 显示全部楼层
这两天在python3.4上安装和运行Scrapy,花了不少时间,主要是安装包失败和不完全的问题
不过现在已经可以正常运行了
举报 使用道具
Fuller 管理员 发表于 2016-6-5 17:20:06 | 显示全部楼层
gz51837844 发表于 2016-6-5 16:46
这两天在python3.4上安装和运行Scrapy,花了不少时间,主要是安装包失败和不完全的问题
不过现在已经可以正 ...

因为是beta版本的原因?
举报 使用道具
您需要登录后才可以回帖 登录 | 立即注册

精彩推荐

  • 批量爬取蘑菇街商品价格、评论信息
  • 微博用户数据分析
  • 批量爬取苏宁商品价格、评论信息
  • 批量爬取亚马逊商品价格、评论信息
  • 批量爬取eBay商品价格、销售情况信息

热门用户

集搜客GooSeeker网络爬虫 ( 粤ICP备11065265号-2 )

GMT+8, 2018-7-19 19:54