2019独角兽企业重金招聘Python工程师标准>>>

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

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

##2,Scrapy的Spider例子 在Scrapy的框架中,Spider与开源Python即时网络爬虫的提取器类似,核心特征是:

  • Spider通常针对一个特定网站
  • Spider里面存了爬行入口URLs集合
  • Scrapy的引擎顺序拿Spider中的入口URL,构造Request对象,启动消息循环
  • Spider提供接口方法,把抓取下来的内容进行输出

对由笔者开发的集搜客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的文档,研究怎样把gsExtractor封装成Scrapy需要的Spider。

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

转载于:https://my.oschina.net/gooseeker/blog/690908

Scrapy入门程序点评相关推荐

  1. 【学习笔记】爬虫框架Scrapy入门

    一. Scrapy简介.架构.数据流和项目结构 二. Scrapy入门 1. Scrapy架构由哪些部分组成? 1.1 Scrapy简介 Scrapy是:由Python语言开发的一个快速.高层次的屏幕 ...

  2. Scrapy入门探索盗墓笔记

    Scrapy入门探索盗墓笔记 声明:本文只作学习研究,禁止用于非法用途,否则后果自负,如有侵权,请告知删除,谢谢! 引言 本文出自微信公众号[Python三剑客] 作者:阿K 阅读时长:5min 留言 ...

  3. rabbitMQ入门程序

    1.生产者 /*** rabbitMQ入门程序消费者** @author xiaoss* @date 2020年10月27日 22:02*/ public class Producer01 {//队列 ...

  4. SpringMVC学习(一)———— springmvc框架原理分析和简单入门程序

    一.什么是springmvc? 我们知道三层架构的思想,并且如果你知道ssh的话,就会更加透彻的理解这个思想,struts2在web层,spring在中间控制,hibernate在dao层与数据库打交 ...

  5. java slfj教程_SLF4J入门程序

    本篇文章帮大家学习SLF4J入门程序,包含了SLF4J入门程序使用方法.操作技巧.实例演示和注意事项,有一定的学习价值,大家可以用来参考. 在本章中,我们将学习如何编写使用SLF4J的简单基本记录器程 ...

  6. java mvc框架代码_JAVA技术学习笔记:SpringMVC框架(内附入门程序开发代码)

    原标题:JAVA技术学习笔记:SpringMVC框架(内附入门程序开发代码) JavaEE体系结构包括四层,从上到下分别是应用层.Web层.业务层.持久层.Struts和SpringMVC是Web层的 ...

  7. IDEA下——Spring入门程序

    创建一个Maven的项目,我的项目结构如下: 在pom文件里写下需要导入的依赖: <?xml version="1.0" encoding="UTF-8" ...

  8. 详细程序注解学OpenCL一 环境配置和入门程序

    本专栏是通过注解程序的方法学习OpenCL,我觉得一个一个地去抠原理也不是办法,干脆直接学习程序,然后把相关原理都直接注解到程序语句当中. 原创地址:http://blog.csdn.net/kend ...

  9. mybatis学习笔记(3)-入门程序一

    2019独角兽企业重金招聘Python工程师标准>>> mybatis学习笔记(3)-入门程序一 标签: mybatis [TOC] 工程结构 在IDEA中新建了一个普通的java项 ...

  10. 网络爬虫(Web crawler)|| 爬虫入门程序

    网络爬虫 网络爬虫(Web crawler),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本 爬虫入门程序 环境准备 JDK1.8 IntelliJ IDEA IDEA自带的Maven 环境 ...

最新文章

  1. 什么是SAP重复性生产
  2. MySQL模糊查询—is null关键字
  3. mysql io_MySQL服务器 IO 100%的分析与优化方案
  4. 《过早退出是一切失败的根源》读后感
  5. HDU5126 stars(4维偏序->cdq套cdq+树状数组)
  6. 用CSS伪类制作一个不断旋转的八卦图?
  7. Delphi 对象的创建(create)与释放(free/destory)
  8. centos7php自启动,centos7系统下nginx安装并配置开机自启动操作
  9. 豆瓣9.0,35万读者“搜不到信息”的神秘作者,我们帮你找到了
  10. POJ 2096 Collecting Bugs:期望dp
  11. ubuntu下载Linux 内核,ubuntu下载linux内核源码
  12. 无法在驱动器0的分区1上安装windows
  13. Oracle系列之--Profile
  14. MLP,GCN,GAT,GraphSAGE, GAE, Pooling,DiffPool
  15. 将整数翻译成英文(C++)
  16. 1320. 拯救奶牛
  17. MySQL数据库比较工具 - mysqldbcompare
  18. 一、CC2530开发环境搭建
  19. JSTL标签库动态生成表格
  20. 这些线上峰会为何不约而同选择亿联视讯方案?云端协同、流畅安全是关键!

热门文章

  1. paip.powerdesign cdm pdm文件 代码生成器 java web 页面 实现
  2. paip.语义分析--单字动词表.txt
  3. paip. lbmall V3.1.1 乐彼多用户商城系统的安全漏洞总结
  4. (转)高盛:老牌投行新生意,华尔街“谷歌”如何炼成?
  5. CSDN创始人董事长蒋涛对话阿里云张献涛:距离云计算终极目标还有多远?
  6. 美团员工被指用钓鱼邮件获拼多多薪资;华为回应暂无其它手机厂商接入HarmonyOS;GCC 放弃版权转让政策...
  7. 投入产出比增长2倍以上!银泰抛弃传统数据库转投阿里云PolarDB
  8. 为了永不停机的计算服务 | 凌云时刻
  9. 【信号检测】基于matlab双稳态随机共振的参数寻优算法【含Matlab源码 1700期】
  10. 【电力负荷预测】基于matlab日特征气象因素支持向量机SVM电力负荷预测【含Matlab源码 1612期】