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,首次发布

Scrapy入门程序点评的更多相关文章

  1. scrapy入门到放弃02:整一张架构图,开发一个程序

    前言 Scrapy开门篇写了一些纯理论知识,这第二篇就要直奔主题了.先来讲讲Scrapy的架构,并从零开始开发一个Scrapy爬虫程序. 本篇文章主要阐述Scrapy架构,理清开发流程,掌握基本操作. ...

  2. [转]Scrapy入门教程

    关键字:scrapy 入门教程 爬虫 Spider 作者:http://www.cnblogs.com/txw1958/ 出处:http://www.cnblogs.com/txw1958/archi ...

  3. Scrapy入门教程

    关键字:scrapy 入门教程 爬虫 Spider作者:http://www.cnblogs.com/txw1958/出处:http://www.cnblogs.com/txw1958/archive ...

  4. scrapy入门使用

    scrapy入门 创建一个scrapy项目 scrapy startporject mySpider 生产一个爬虫 scrapy genspider itcast "itcast.cn&qu ...

  5. Scrapy入门教程(转)

    关键字:scrapy 入门教程 爬虫 Spider作者:http://www.cnblogs.com/txw1958/出处:http://www.cnblogs.com/txw1958/archive ...

  6. 小白学 Python 爬虫(36):爬虫框架 Scrapy 入门基础(四) Downloader Middleware

    人生苦短,我用 Python 前文传送门: 小白学 Python 爬虫(1):开篇 小白学 Python 爬虫(2):前置准备(一)基本类库的安装 小白学 Python 爬虫(3):前置准备(二)Li ...

  7. 小白学 Python 爬虫(38):爬虫框架 Scrapy 入门基础(六) Item Pipeline

    人生苦短,我用 Python 前文传送门: 小白学 Python 爬虫(1):开篇 小白学 Python 爬虫(2):前置准备(一)基本类库的安装 小白学 Python 爬虫(3):前置准备(二)Li ...

  8. 小白学 Python 爬虫(40):爬虫框架 Scrapy 入门基础(七)对接 Selenium 实战

    人生苦短,我用 Python 前文传送门: 小白学 Python 爬虫(1):开篇 小白学 Python 爬虫(2):前置准备(一)基本类库的安装 小白学 Python 爬虫(3):前置准备(二)Li ...

  9. Scrapy入门到放弃01:开启爬虫2.0时代

    前言 Scrapy is coming!! 在写了七篇爬虫基础文章之后,终于写到心心念念的Scrapy了.Scrapy开启了爬虫2.0的时代,让爬虫以一种崭新的形式呈现在开发者面前. 在18年实习的时 ...

随机推荐

  1. python基础之 list和 tuple(元组)

    list Python内置的一种数据类型是列表:list.list是一种有序的集合,可以随时添加和删除其中的元素. 比如,列出班里所有同学的名字,就可以用一个list表示: >>> ...

  2. C - The Hardest Problem Ever

    Description Julius Caesar lived in a time of danger and intrigue. The hardest situation Caesar ever ...

  3. vs2012配置opencv及简单测试

    为visual studio2012搭建openCV平台,实现打开图片. 实现步骤: 1.1.配置环境变量 基于win7操作系统的环境配置步骤: 1.1.1 计算机—>属性—>更改设置—& ...

  4. rotate.js实现图片旋转 (chrome,IE,firefox都可以实现)

    找了好多资料,要么是IE可以用,但是谷歌不行,,还有就是两个都可以用的,图片大小显示不全.终于找到一个好一点的js,先贴一下代码. 1.rotate.js jQuery.fn.rotate = fun ...

  5. SpringMVC的web.xml配置注意

    web.xml需要放过所有资源文件,这个就看自己的系统中有哪些静态文件.一般的都是.js..css..jpg..png.jpeg等等,但是我还用到一些字体文件资源,所以也要过滤,不然前台会找不到. & ...

  6. SSAS-时间维度的标准设计

    1.首先要构建一个时间维度表,下面给出通用的构建时间维度的存储过程: USE [BI_DW] GO /****** Object: StoredProcedure [dbo].[proc_Dim_da ...

  7. 你应该知道的CSS文字大小单位PX、EM、PT[转]

    摘要: 这里引用的是Jorux的“95%的中国网站需要重写CSS”的文章, 题目有点吓人,但是确实是现在国内网页制作方面的一些缺陷.我一直也搞不清楚px与em之间的关系和特点,看过以后确实收获很大.平 ...

  8. UI经验

    移动端设计原则----大.高.宽---------------->本质上都是以用户体验为判断依据 1.手指触摸方便.精准------------>高度 50px.色块 2.字体大小---- ...

  9. Servlet中Web.xml的配置详解

    1 定义头和根元素 部署描述符文件就像所有XML文件一样,必须以一个XML头开始.这个头声明可以使用的XML版本并给出文件的字符编码. DOCYTPE声明必须立即出现在此头之后.这个声明告诉服务器适用 ...

  10. LoadRunner Tutorial

    LoadRunner Tutorial Welcome to the LoadRunner tutorial. The tutorial is a self-paced guide that lead ...