资讯专栏INFORMATION COLUMN

Scrapy入门程序点评

baiy / 2256人阅读

摘要:本文大部分内容摘抄自官网的,看到巧妙之处则加了点评。,接下来的工作至此,框架已经明确选定了,接下来,我们将进一步研读的文档,研究怎样把的封装成需要的。,文档修改历史,首次发布

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,首次发布

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/38003.html

相关文章

  • 首次公开,整理12年积累的博客收藏夹,零距离展示《收藏夹吃灰》系列博客

    摘要:时间永远都过得那么快,一晃从年注册,到现在已经过去了年那些被我藏在收藏夹吃灰的文章,已经太多了,是时候把他们整理一下了。那是因为收藏夹太乱,橡皮擦给设置私密了,不收拾不好看呀。 ...

    Harriet666 评论0 收藏0
  • python

    Python装饰器为什么难理解? 无论项目中还是面试都离不开装饰器话题,装饰器的强大在于它能够在不修改原有业务逻辑的情况下对代码进行扩展,权限校验、用户认证、日志记录、性能测试、事务处理、缓存等都是装饰器的绝佳应用场景,它能够最大程度地对代码进行复用。 但为什么初学者对装饰器的理解如此困难,我认为本质上是对Py… Python 实现车牌定位及分割 作者用 Python 实现车牌定位及分割的实践。 ...

    chenatu 评论0 收藏0
  • Scrapy的架构初探

    摘要:引言本文简单讲解一下的架构。没错,开源的通用提取器就是要集成到架构中,最看重的是的事件驱动的可扩展的架构。架构图就是针对特定目标网站编写的内容提取器,这是在通用网络爬虫框架中最需要定制的部分。 1. 引言 本文简单讲解一下Scrapy的架构。没错,GooSeeker开源的通用提取器gsExtractor就是要集成到Scrapy架构中,最看重的是Scrapy的事件驱动的可扩展的架构。除了...

    刘明 评论0 收藏0
  • 基于 Python 的 Scrapy 爬虫入门:环境搭建

    摘要:一基础环境由于不是职业的开发者,因此环境是基于的。二安装打开命令行工具创建虚拟环境,默认情况下会创建目录,所有的虚拟环境都会产生一个子目录保存在此,里面包含基本程序文件以及库文件。 目录 基于 Python 的 Scrapy 爬虫入门:环境搭建 基于 Python 的 Scrapy 爬虫入门:页面提取 基于 Python 的 Scrapy 爬虫入门:图片处理 作为一个全栈工程师(...

    Gu_Yan 评论0 收藏0
  • Scrapy 框架入门简介

    摘要:解析的方法,每个初始完成下载后将被调用,调用的时候传入从每一个传回的对象来作为唯一参数,主要作用如下负责解析返回的网页数据,提取结构化数据生成生成需要下一页的请求。 Scrapy 框架 Scrapy是用纯Python实现一个为了爬取网站数据、提取结构性数据而编写的应用框架,用途非常广泛。 框架的力量,用户只需要定制开发几个模块就可以轻松的实现一个爬虫,用来抓取网页内容以及各种图片,非常...

    Coding01 评论0 收藏0

发表评论

0条评论

baiy

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<