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"

  • 相关阅读:
    将Nginx添加到windows服务中
    springboot使用redis管理session
    GIT常用命令
    阻止360、谷歌浏览器表单自动填充
    谈谈对Spring IOC的理解
    同一个Nginx服务器同一端口配置多个代理服务
    LeetCode 653. Two Sum IV
    109. Convert Sorted List to Binary Search Tree(根据有序链表构造平衡的二叉查找树)
    108. Convert Sorted Array to Binary Search Tree(从有序数组中构造平衡的BST)
    LeetCode 236. Lowest Common Ancestor of a Binary Tree(二叉树求两点LCA)
  • 原文地址:https://www.cnblogs.com/luo630/p/9261792.html
Copyright © 2011-2022 走看看