我在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”])。我不想这样做。我想创建代码,以递归方式抓取所有网站。
这不是什么大问题,但所有博客帖子等只显示如何从特定网站获取链接(例如,可能是他的链接在列表标签中)。我上面的代码适用于所有锚标签,无论它运行在哪个网站上。
我不想在野外使用它,我需要它用于演示目的,所以我不会突然惹恼每个人过度网络爬行。
任何帮助将不胜感激!
答案 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所需的行为,您必须
一个未经测试的例子(当然可以改进):
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)