当前位置: 首页 > 面试题库 >

使用一个Scrapy蜘蛛访问多个网站

邢乐
2023-03-14
问题内容

我需要创建一个用户可配置的网络爬虫/爬虫,并且我正在考虑使用Scrapy。但是,我无法对域和允许的URL regex:es进行硬编码-
而是可以在GUI中对其进行配置。

如何(尽可能简单)使用Scrapy创建一个蜘蛛或一组蜘蛛,其中域和允许的URL
regex:es是可动态配置的?例如,我将配置写入文件,然后蜘蛛程序以某种方式读取它。


问题答案:

警告:此答案适用于Scrapy v0.7,自那时以来,蜘蛛管理器api发生了很大变化。

覆盖默认的SpiderManager类,从数据库或其他地方加载您的自定义规则,并使用您自己的规则/正则表达式和domain_name实例化自定义蜘蛛

在mybot / settings.py中:

SPIDER_MANAGER_CLASS = 'mybot.spidermanager.MySpiderManager'

在mybot / spidermanager.py中:

from mybot.spider import MyParametrizedSpider

class MySpiderManager(object):
    loaded = True

    def fromdomain(self, name):
        start_urls, extra_domain_names, regexes = self._get_spider_info(name)
        return MyParametrizedSpider(name, start_urls, extra_domain_names, regexes)

    def close_spider(self, spider):
        # Put here code you want to run before spiders is closed
        pass

    def _get_spider_info(self, name):
        # query your backend (maybe a sqldb) using `name` as primary key, 
        # and return start_urls, extra_domains and regexes
        ...
        return (start_urls, extra_domains, regexes)

现在是您的自定义蜘蛛类,位于mybot / spider.py中:

from scrapy.spider import BaseSpider

class MyParametrizedSpider(BaseSpider):

    def __init__(self, name, start_urls, extra_domain_names, regexes):
        self.domain_name = name
        self.start_urls = start_urls
        self.extra_domain_names = extra_domain_names
        self.regexes = regexes

     def parse(self, response):
         ...

笔记:

  • 如果您想利用CrawlSpider的Rules系统,也可以对其进行扩展
  • 要运行蜘蛛,请使用: ./scrapy-ctl.py crawl <name>,其中name传递给SpiderManager.fromdomain,这是从后端系统检索更多蜘蛛信息的关键
  • 由于解决方案会覆盖默认的SpiderManager,因此无法对经典的Spider(每个SPIDER的python模块)进行编码,但是,我认为这对您来说不是问题。有关默认蜘蛛管理器TwistedPluginSpiderManager的更多信息


 类似资料:
  • 问题内容: 我在一个要刮擦多个站点(可能是数百个站点)的项目中使用了scrapy,并且我必须为每个站点编写特定的蜘蛛。我可以使用以下命令在部署要抓取的项目中安排 一只 蜘蛛: 但是,如何一次计划一个项目中的 所有 蜘蛛呢? 所有帮助非常感谢! 问题答案: 我一次运行200个以上Spider的解决方案是为该项目创建一个自定义命令。有关实现自定义命令的更多信息,请参见http://doc.scrapy

  • 问题内容: 有没有一种方法可以在Spider类终止之前触发它? 我可以自己终止蜘蛛,如下所示: 但是我找不到任何有关如何确定蜘蛛何时自然退出的信息。 问题答案: 看来您可以通过来注册信号监听器。 我会尝试类似的东西: 在较新版本的scrapy中已弃用。相反,您可以使用from 。

  • 问题内容: 有没有一种方法可以在不使用Scrapy守护程序的情况下运行Scrapy项目中的所有蜘蛛程序?曾经有一种使用来运行多个Spider的方法,但是该语法已删除,Scrapy的代码也进行了很多更改。 我尝试创建自己的命令: 但是,一旦在上注册了蜘蛛,我就会得到所有其他蜘蛛的断言错误: 有什么办法吗?我不想开始子类化核心Scrapy组件,而只是为了运行所有我的蜘蛛。 问题答案: 这是一个不在自定

  • 蜘蛛记录分为两部分: 时间筛选 和 蜘蛛记录 (详情) 1.时间筛选 便捷按钮有今日、昨日、前日、上周 X、近七天,并且能自定义选择时间段来得出想要的结果报表 2.蜘蛛记录 (时间段详情) 1)蜘蛛记录便是搜索引擎通过蜘蛛爬行所留下的痕迹,蜘蛛记录中的细分做的非常的详细, 包含蜘蛛IP地址、访问URL、蜘蛛类型、来访时间 2)搜索引擎爬取网页时,只有触发js统计代码才能被统计,故数据仅供参考

  • 海蜘蛛EWP(Easy Webserver Platform)是专门针对服务器运营商/企业等为各类网站运营而设计的稳定易用Web服务平台。它兼有路由器的功能,集专业级防火墙于一体,能够精确控制内外网的访问和各个用户的权限,打造一个高稳定性、易维护、投资低的全新智能化Web应用平台。 EWP基于嵌入式架构,提供稳定高效的底层核心功能和应用接口。能够兼容绝大多数国内外常见的Web应用,提供主流的Web

  • 本文向大家介绍Python打印scrapy蜘蛛抓取树结构的方法,包括了Python打印scrapy蜘蛛抓取树结构的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Python打印scrapy蜘蛛抓取树结构的方法。分享给大家供大家参考。具体如下: 通过下面这段代码可以一目了然的知道scrapy的抓取页面结构,调用也非常简单 希望本文所述对大家的Python程序设计有所帮助。