Scrapy入门程序点评
2024-08-22 19:33:11
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,首次发布
最新文章
- SQL Server SQL性能优化之--数据库在“简单”参数化模式下,自动参数化SQL带来的问题
- 您还在招聘网上海量投简历然后等面试机会吗?那你已经OUT了。
- centos6安装svn1.9
- 如何在Mac OSX 10.10上安装GDB
- 股票交易(洛谷U6084)
- 如何使用本地yum源?
- Android 子activity关闭 向父activity传值
- SQLiteAPI函数详解
- 意犹未尽而来的第一篇Android 逆向
- NuGet学习笔记(1)——初识NuGet及快速安装使用(转)
- java中关于窗体居中显示问题
- git 工作流介绍
- web项目中js加载慢问题解决思路
- Hugo + Github Pages 搭建个人博客
- SQLServer之事务简介
- 微信小程序上传图片
- vue.js 精学组件记录
- Feature Extractor[DenseNet]
- Vuejs学习笔记(一)
- JVM 内部原理(五)— 基本概念之 Java 虚拟机官方规范文档,第 7 版
热门文章
- [Effective Modern C++] Item 1. Understand template type deduction - 了解模板类型推断
- Uncaught TypeError: Object [object Object] has no method 'live'
- JavaWeb限流QPS简易框架
- JSON入门之二:org.json的基本用法
- Spring的IOC注解学习
- Python Tkinter canvas oval原理
- microwindows Win32 API demo
- python提取隐含结构的字符串
- 调用Windows属性窗口(居然是通过注册表来调用的)
- nginx grok 正则错误的输出情况