zoukankan      html  css  js  c++  java
  • Scrapy:创建爬虫程序的方式

    Windows 10家庭中文版,Python 3.6.4,Scrapy 1.5.0,

    在Scrapy中,建立爬虫程序或项目的方式有两种(在孤读过Scrapy的大部分文档后):

    1.继承官方Spider类(5个)

    2.命令行工具scrapy genspider(4个)

    方式一:继承官方Spider类

    下图是官网的示例:继承了scrapy.Spider

    这里的scrapy.Spider是在scrapy包的__init__.py中导入的,实际上来自于scrapy.spiders.Spiders

    除了Spider类以外,scrapy内部还有几个Generic Spiders类:

    -class scrapy.spiders.CrawlSpider
    -class scrapy.spiders.XMLFeedSpider
    -class scrapy.spiders.CSVFeedSpider
    -class scrapy.spiders.SitemapSpider

    上面的几个Spider类都可以被继承以实现自己的爬虫程序(目前自己不是很熟悉,仅在前面测试过SitemapSpider,但其官网SitemapSpider的示例没有name属性,故需要添加后才可以运行)。

    更多资料:Scrapy官方Spiders文档

    方式二:命令行工具scrapy genspider

    还可以使用scrapy genspider命令建立爬虫程序。

    官文Command line tool介绍中,genspider是一个global命令,这意味着可以使用genspider在 Scrapy项目内 或 外 都可以建立爬虫程序。

    下面几个配置项需要注意:

    -scrapy genspider -h

     genspider的帮助信息(下图展示了部分Usage信息)。

     

    -scrapy genspider -l

     显示可以使用的爬虫模板,就是 新建爬虫程序可以继承哪个内部爬虫类。这里存在一个疑问,没有SitemapSpider的模板。

     

    -scrapy genspider -t TEMPLATE ...

     使用TEMPLATE对应的内部爬虫类建立爬虫程序(下图分别用四种模板建立了四个爬虫程序,其实,basic是默认的,可以不用写)。

     

     打开其中的www.techmeme.com的爬虫程序看看:使用模板xmlfeed建立,继承了XMLFeedSpider。

     

     但这里存在问题:www.techmeme.com(一个很有名的科技资讯网站)的主页是HTTPS的,而这里的start_urls显示的是HTTP

     前面看资料说在DNS服务器还是什么地方可以配置自动跳转到HTTPS版本。 可是, 这里是否需要更改为HTTPS呢?孤认为是需要的!做 试验 验证会更好哦!)

     

    注意,上面是使用genspider命令在项目外建立爬虫程序,而要在项目内建立爬虫程序时,需要选择Scrapy项目中的spiders目录,否则,无法自动检测到(按理说是这样,总不能在项目下的任何位置建立吧,项目要有项目的规矩)。

    总结

    从建立爬虫程序的效率来看,使用命令行的方式快速很多,但不能创建SitemapSpider类;

    上面讲的都是 继承Scrapy内部的爬虫类, 那么,是否可以 继承自定义的爬虫类 呢?按理说是可以的,实际上也应该可以,需要验证;

    无论哪种方式,都需要后续更多的coding工作,因此,在继续之前,请熟悉Scrapy的爬虫的工作机制,见官文Spiders

    如果还有更多的方式,或者,读者自己研发的方式,欢迎告知,会很感激;

    当然,使用其它命令行工具也可以建立一些看不见的爬虫程序,就不是本文所涉及的了,需要更理解Scrapy才可以。

    0704-0951 Update

    关于www.techmeme.com的爬虫程序,使用runspider进行了测试:

    -默认的HTTP时会发生 重定向(302)

    -更改为HTTPS后则不会 发生  重定向

    也可以使用scrapy parse命令进行测试,但是,首先要将上面的myspider2放到某个Scrapy项目的spiders目录下:

    scrapy parse --spider=myspider2 -d 3 "https://www.techmeme.com"

  • 相关阅读:
    组合,多态,封装
    继承and派生
    面向对象编程 类 后补充了元类 和单例
    数据结构与算法(Python)
    git版本控制系统命令
    python数据类型
    MVC与MTV模型及Django请求的生命周期
    linux目录文件及系统启动知识
    linux命令汇总
    Python字符串和列表的内置方法
  • 原文地址:https://www.cnblogs.com/luo630/p/9261792.html
Copyright © 2011-2022 走看看