Scrapy从任何网站获取所有链接

时间:2018-02-23 11:01:23

标签: python python-3.x scrapy web-crawler

我在Python 3中有一个Web爬虫的代码:

for(var c = 0; c < this.coins.length; c++){
  var path = anime.path('#path-'+ c);
  anime({
    targets: document.getElementById(this.coins[c].ref),
    cx: path('x'),
    cy: path('y'),
    duration: 1000,
    delay : this.coins.length * 100 - (100 * c),
    easing: 'easeInOutQuad',
    rotation: 0,
  });
  }

代码基本上从我的GitHub页面网站获取所有链接,然后它从这些链接中获取所有链接,依此类推,直到时间结束或发生错误。

我想在Scrapy中重新创建此代码,因此它可以服从robots.txt并成为更好的网络爬虫。我在线研究过,我只能找到有关如何刮取特定域名的教程/指南/ stackoverflow / quora / blog帖子(例如,allowed_domains = [“google.com”])。我不想这样做。我想创建代码,以递归方式抓取所有网站。

这不是什么大问题,但所有博客帖子等只显示如何从特定网站获取链接(例如,可能是他的链接在列表标签​​中)。我上面的代码适用于所有锚标签,无论它运行在哪个网站上。

我不想在野外使用它,我需要它用于演示目的,所以我不会突然惹恼每个人过度网络爬行。

任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:3)

如果您想允许抓取所有域名,请不要指定allowed_domains,并使用LinkExtractor来提取所有链接。

一个遵循所有链接的简单蜘蛛:

class FollowAllSpider(CrawlSpider):
    name = 'follow_all'

    start_urls = ['https://example.com']
    rules = [Rule(LinkExtractor(), callback='parse_item', follow=True)]

    def parse_item(self, response):
        pass

答案 1 :(得分:0)

有一整段scrapy指南致力于broad crawls。我建议你细化你的设置,以便成功地做到这一点。

要重新创建scrapy所需的行为,您必须

  • 在您的网页中设置您的起始网址。
  • 编写一个跟随所有链接的解析函数并递归调用自身,向蜘蛛变量添加请求的URL

一个未经测试的例子(当然可以改进):

class AllSpider(scrapy.Spider):
    name = 'all'

    start_urls = ['https://yourgithub.com']

    def __init__(self):
        self.links=[]

    def parse(self, response):
        self.links.append(response.url)
        for href in response.css('a::attr(href)'):
            yield response.follow(href, self.parse)