1,引言

在《Scrapy的架构初探》一文,我基于爬虫开发的经验对Scrapy官网文章作了点评和解读,事件驱动的异步处理架构、极强的模块化等是个绝好的框架,接着我细读了官网的《Scrapy at a glance》,更加强了我的感受:就是他了——开源Python即时网络爬虫需要一个爬虫框架,我不想重复发明轮子,只想专注于爬虫里面的提取器的生成和使用,也就是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谋数台上定义的一组抓取规则 + 会员中心的爬虫罗盘

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

class StackOverflowSpider(scrapy.Spider):
name = 'stackoverflow'
start_urls = ['http://stackoverflow.com/questions?sort=votes'] def parse(self, response):
for href in response.css('.question-summary h3 a::attr(href)'):
full_url = response.urljoin(href.extract())
yield scrapy.Request(full_url, callback=self.parse_question) def parse_question(self, response):
yield {
'title': response.css('h1 a::text').extract()[0],
'votes': response.css('.question .vote-count-post::text').extract()[0],
'body': response.css('.question .post-text').extract()[0],
'tags': response.css('.question .post-tag::text').extract(),
'link': response.url,
}

看这个例子需要注意以下几点

  • start_urls存储入口网址列表,本例只有一个网址
  • parse()函数是爬到了网页后执行的,是由引擎回调的
  • 本来到parse()就完成了,但是这个例子展示了一个两级抓取的案例,在parse()里面构造了下一级抓取的任务,生成Request对象,并登记一个回调函数
  • parse_question()是第二级的解析网页的函数,返回了一个JSON对象
  • 事件驱动模式显而易见,可以构造好多Request,丢给引擎即可,不用阻塞式等待

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

3,接下来的工作

至此,Scrapy框架已经明确选定了,接下来,我们将进一步研读Scrapy的文档,研究怎样把Python即时网络爬虫的gsExtractor封装成Scrapy需要的Spider
4,文档修改历史
 
2016-06-17:V1.0,首次发布

最新文章

  1. SQL Server SQL性能优化之--数据库在“简单”参数化模式下,自动参数化SQL带来的问题
  2. 您还在招聘网上海量投简历然后等面试机会吗?那你已经OUT了。
  3. centos6安装svn1.9
  4. 如何在Mac OSX 10.10上安装GDB
  5. 股票交易(洛谷U6084)
  6. 如何使用本地yum源?
  7. Android 子activity关闭 向父activity传值
  8. SQLiteAPI函数详解
  9. 意犹未尽而来的第一篇Android 逆向
  10. NuGet学习笔记(1)——初识NuGet及快速安装使用(转)
  11. java中关于窗体居中显示问题
  12. git 工作流介绍
  13. web项目中js加载慢问题解决思路
  14. Hugo + Github Pages 搭建个人博客
  15. SQLServer之事务简介
  16. 微信小程序上传图片
  17. vue.js 精学组件记录
  18. Feature Extractor[DenseNet]
  19. Vuejs学习笔记(一)
  20. JVM 内部原理(五)— 基本概念之 Java 虚拟机官方规范文档,第 7 版

热门文章

  1. [Effective Modern C++] Item 1. Understand template type deduction - 了解模板类型推断
  2. Uncaught TypeError: Object [object Object] has no method 'live'
  3. JavaWeb限流QPS简易框架
  4. JSON入门之二:org.json的基本用法
  5. Spring的IOC注解学习
  6. Python Tkinter canvas oval原理
  7. microwindows Win32 API demo
  8. python提取隐含结构的字符串
  9. 调用Windows属性窗口(居然是通过注册表来调用的)
  10. nginx grok 正则错误的输出情况