Scrapy入门程序点评
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入门程序点评相关推荐
- 【学习笔记】爬虫框架Scrapy入门
一. Scrapy简介.架构.数据流和项目结构 二. Scrapy入门 1. Scrapy架构由哪些部分组成? 1.1 Scrapy简介 Scrapy是:由Python语言开发的一个快速.高层次的屏幕 ...
- Scrapy入门探索盗墓笔记
Scrapy入门探索盗墓笔记 声明:本文只作学习研究,禁止用于非法用途,否则后果自负,如有侵权,请告知删除,谢谢! 引言 本文出自微信公众号[Python三剑客] 作者:阿K 阅读时长:5min 留言 ...
- rabbitMQ入门程序
1.生产者 /*** rabbitMQ入门程序消费者** @author xiaoss* @date 2020年10月27日 22:02*/ public class Producer01 {//队列 ...
- SpringMVC学习(一)———— springmvc框架原理分析和简单入门程序
一.什么是springmvc? 我们知道三层架构的思想,并且如果你知道ssh的话,就会更加透彻的理解这个思想,struts2在web层,spring在中间控制,hibernate在dao层与数据库打交 ...
- java slfj教程_SLF4J入门程序
本篇文章帮大家学习SLF4J入门程序,包含了SLF4J入门程序使用方法.操作技巧.实例演示和注意事项,有一定的学习价值,大家可以用来参考. 在本章中,我们将学习如何编写使用SLF4J的简单基本记录器程 ...
- java mvc框架代码_JAVA技术学习笔记:SpringMVC框架(内附入门程序开发代码)
原标题:JAVA技术学习笔记:SpringMVC框架(内附入门程序开发代码) JavaEE体系结构包括四层,从上到下分别是应用层.Web层.业务层.持久层.Struts和SpringMVC是Web层的 ...
- IDEA下——Spring入门程序
创建一个Maven的项目,我的项目结构如下: 在pom文件里写下需要导入的依赖: <?xml version="1.0" encoding="UTF-8" ...
- 详细程序注解学OpenCL一 环境配置和入门程序
本专栏是通过注解程序的方法学习OpenCL,我觉得一个一个地去抠原理也不是办法,干脆直接学习程序,然后把相关原理都直接注解到程序语句当中. 原创地址:http://blog.csdn.net/kend ...
- mybatis学习笔记(3)-入门程序一
2019独角兽企业重金招聘Python工程师标准>>> mybatis学习笔记(3)-入门程序一 标签: mybatis [TOC] 工程结构 在IDEA中新建了一个普通的java项 ...
- 网络爬虫(Web crawler)|| 爬虫入门程序
网络爬虫 网络爬虫(Web crawler),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本 爬虫入门程序 环境准备 JDK1.8 IntelliJ IDEA IDEA自带的Maven 环境 ...
最新文章
- 什么是SAP重复性生产
- MySQL模糊查询—is null关键字
- mysql io_MySQL服务器 IO 100%的分析与优化方案
- 《过早退出是一切失败的根源》读后感
- HDU5126 stars(4维偏序->cdq套cdq+树状数组)
- 用CSS伪类制作一个不断旋转的八卦图?
- Delphi 对象的创建(create)与释放(free/destory)
- centos7php自启动,centos7系统下nginx安装并配置开机自启动操作
- 豆瓣9.0,35万读者“搜不到信息”的神秘作者,我们帮你找到了
- POJ 2096 Collecting Bugs:期望dp
- ubuntu下载Linux 内核,ubuntu下载linux内核源码
- 无法在驱动器0的分区1上安装windows
- Oracle系列之--Profile
- MLP,GCN,GAT,GraphSAGE, GAE, Pooling,DiffPool
- 将整数翻译成英文(C++)
- 1320. 拯救奶牛
- MySQL数据库比较工具 - mysqldbcompare
- 一、CC2530开发环境搭建
- JSTL标签库动态生成表格
- 这些线上峰会为何不约而同选择亿联视讯方案?云端协同、流畅安全是关键!
热门文章
- paip.powerdesign cdm pdm文件 代码生成器 java web 页面 实现
- paip.语义分析--单字动词表.txt
- paip. lbmall V3.1.1 乐彼多用户商城系统的安全漏洞总结
- (转)高盛:老牌投行新生意,华尔街“谷歌”如何炼成?
- CSDN创始人董事长蒋涛对话阿里云张献涛:距离云计算终极目标还有多远?
- 美团员工被指用钓鱼邮件获拼多多薪资;华为回应暂无其它手机厂商接入HarmonyOS;GCC 放弃版权转让政策...
- 投入产出比增长2倍以上!银泰抛弃传统数据库转投阿里云PolarDB
- 为了永不停机的计算服务 | 凌云时刻
- 【信号检测】基于matlab双稳态随机共振的参数寻优算法【含Matlab源码 1700期】
- 【电力负荷预测】基于matlab日特征气象因素支持向量机SVM电力负荷预测【含Matlab源码 1612期】