博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Scrapy入门程序点评
阅读量:5857 次
发布时间:2019-06-19

本文共 1541 字,大约阅读时间需要 5 分钟。

hot3.png

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

本文大部分内容摘抄自Scrapy官网的《》,看到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

你可能感兴趣的文章
[OpenGL ES 06]使用VBO:顶点缓存
查看>>
PHP开发不能违背的安全规则 过滤用户输入
查看>>
oracle主机名修改
查看>>
【原创】MessageBox设置默认按钮
查看>>
方法nullJavascript中创建对象的几种方法
查看>>
研究中
查看>>
对SQLSERVER数据库事务日志的疑问
查看>>
(ios实战)实现类似于android 的toast控件
查看>>
oracle系统包——dbms_transaction用法
查看>>
Wooden Sticks
查看>>
(六)观察者模式详解(包含观察者模式JDK的漏洞以及事件驱动模型)
查看>>
新手入侵笔记
查看>>
我的MYSQL学习心得(二) 数据类型宽度
查看>>
算法教程(3)zz
查看>>
《C#高级编程》学习笔记----c#内存管理--栈VS堆
查看>>
摊还分析
查看>>
Struts2中 Path (getContextPath与basePath)
查看>>
C++的ABI真特么是evil
查看>>
ylbtech-LanguageSamples-SimpleVariance
查看>>
数据仓库3NF基础理论和实例
查看>>