Scrapy入门程序点评

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的文档,研究怎样把GooSeeker的gsExtractor封装成Scrapy需要的Spider。

4,文档修改历史

2016-06-13:V1.0,首次发布

时间: 2024-10-21 02:14:27

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

scrapy入门实践1

Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架. 可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中. 这就是整个Scrapy的架构图了: 各部件职能: Scrapy Engine: 这是引擎,负责Spiders.ItemPipeline.Downloader.Scheduler中间的通讯,信号.数据传递等 Scheduler(调度器): 它负责接受引擎发送过来的requests请求,并按照一定的方式进行整理排列,入队.并等待Scrapy Engine(引擎)来请

【scrapy】学习Scrapy入门

Scrapy介绍 Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架. 可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中. 所谓网络爬虫,就是一个在网上到处或定向抓取数据的程序,当然,这种说法不够专业,更专业的描述就是,抓取特定网站网页的HTML数据.抓取网页的一般方法是,定义一个入口页面,然后一般一个页面会有其他页面的URL,于是从当前页面获取到这些URL加入到爬虫的抓取队列中,然后进入到新页面后再递归的进行上述的操作,其实说来就跟深度遍历或广度遍历一样. Scr

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

人生苦短,我用 Python 前文传送门: 小白学 Python 爬虫(1):开篇 小白学 Python 爬虫(2):前置准备(一)基本类库的安装 小白学 Python 爬虫(3):前置准备(二)Linux基础入门 小白学 Python 爬虫(4):前置准备(三)Docker基础入门 小白学 Python 爬虫(5):前置准备(四)数据库基础 小白学 Python 爬虫(6):前置准备(五)爬虫框架的安装 小白学 Python 爬虫(7):HTTP 基础 小白学 Python 爬虫(8):网页基

Mahout学习之Mahout简介、安装、配置、入门程序测试

一.Mahout简介 查了Mahout的中文意思--驭象的人,再看看Mahout的logo,好吧,想和小黄象happy地玩耍,得顺便陪陪这位驭象人耍耍了... 附logo: (就是他,骑在象头上的那个Mahout) 步入正文啦: Mahout 是一个很强大的数据挖掘工具,是一个分布式机器学习算法的集合,包括:被称为Taste的分布式协同过滤的实现.分类.聚类等.Mahout最大的优点就是基于hadoop实现,把很多以前运行于单机上的算法,转化为了MapReduce模式,这样大大提升了算法可处理的

springmvc入门程序

springmvc的入门程序(和前面的mybatis使用同一个案例,商城的案例.订单,购物车等) 需求: 功能需求: 商品的列表查询 环境准备: Java环境: Jdk1.7 Myeclipes9 Springmvc版本:spring3.2 需要spring3.2所有jar,一定要包括spring-webmvc那个 开发步骤: 1.导入jar包,这个不解释了. 2.在web.xml中配置前端控制器: <servlet> <servlet-name>springmvc</ser

ant入门程序

一. ant简介 Ant是apache的一个核心项目, 它的作用是项目自动化构建, 因为它内置了Javac.Java.创建目录.复制文件等功能, 直接运行build.xml文件就可以编译我们的项目. 二. ant配置 1. 新建环境变量ANT_HOME: ant的解压目录 2. 在path中配置:%ANT_HOME%/bin; 3. 在命令行中输入ant, 如果出现 Buildfile:build.xml does not exist! Build failed 说明配置成功 三. ant入门程

python web入门程序

python2.x web入门程序 #!/usr/bin/python # -*- coding: UTF-8 -*- # 只在python2.x 有效 import os #Python的标准库中的os模块包含普遍的操作系统功能 import re #引入正则表达式对象 import urllib #用于对URL进行编解码 from BaseHTTPServer import HTTPServer, BaseHTTPRequestHandler #导入HTTP处理相关的模块 #自定义处理程序,

MyBatis 介绍、简单入门程序

JDBC 编程中的问题 1. 将 SQL 语句硬编码到 Java 代码.不利于系统维护. 设想怎样解决:将SQL单独抽取出来,在配置文件(xml方式.properties文件)进行配置. 2. 数据库连接不能反复利用,对数据库资源是一中浪费. 设想怎样解决:使用数据库连接池管理数据库连接. 3. 向 Statement 设置參数时,对于參数的位置通过硬编码指定,不利于系统维护. 设想怎样解决:是否可以自己主动将 Java 对象的值设置到 Statement. 4. 遍历结果集.resultSet

struts2入门程序

1.搭建struts2环境开发的步骤 搭建struts2环境时,我们一般需要做一下几个步骤的工作: 1.  创建javaweb工程 2.  找到开发struts应用所需要使用的jar 3.  创建jsp文件 4.  创建action文件 5.  编写struts2的配置文件 6.  在web.xml中加入struts2 MVC框架启动配置 开发struts2中需要使用的基本jar包: 关于struts2的提示: 我的myeclipes默认的struts2提示只到2.1,如果需要有2.3的提示,有