gpt4 book ai didi

python - Scrapy CrawlSpider - 仅在第一个 URL 完成后才开始爬行下一个 URL

转载 作者:行者123 更新时间:2023-12-01 04:13:37 28 4
gpt4 key购买 nike

我有一只看起来像这样的蜘蛛

class SomeSpider(CrawlSpider):
name = 'grablink'
allowed_domains = ['www.yellowpages.com', 'sports.yahoo.com']
start_urls = ['http://www.yellowpages.com/', 'http://sports.yahoo.com']
rules = (Rule(LinkExtractor(allow=allowed_domains), callback='parse_obj', follow=False),)

def parse_obj(self,response):
for link in LinkExtractor(allow=(), deny=self.allowed_domains).extract_links(response):
item = CrawlsItem()
item['DomainName'] = get_domain(response.url)
item['LinkToOtherDomain'] = link.url
item['LinkFoundOn'] = response.url
yield item

它从给定的起始 URL 中提取内部链接,然后跟踪它们并从链接页面中提取所有外部链接。它工作正常,但现在结果没有按任何特定顺序排列,这意味着某些行将来自 yellopages.com,而其他行将来自 sports.yahoo.com。我知道这是正常的 Scrapy 行为,因为它是异步的,但无论如何我可以做到这一点,以便首先从 Yellowpages.com 提取所有链接,然后从 sports.yahoo.com 等提取。在特定 URL 内部,抓取可以是异步的,但这并不重要。但 URL 本身应该按顺序进行爬网。

我认为一种方法是将所有起始网址保存在一个单独的列表中,并在 start_urls 中仅放入一个网址,然后在该网址的抓取完成后运行爬虫,我将在以下位置开始抓取另一个网址。但我不知道该在哪里做这件事。我如何知道对一个网址的抓取是否已完成,以便我可以开始下一个网址?

最佳答案

您有多种选择:

  • 编写特定于站点的蜘蛛程序,例如用于黄页的蜘蛛程序、用于雅虎的蜘蛛程序!
  • 编写一个通用蜘蛛程序,并在运行蜘蛛程序时接受参数来决定抓取哪个网站。
  • 如果你想手动执行,你可以手动更改 url 并运行它。

我假设您有一个 Scrapy 项目设置。您可以使用命令行运行蜘蛛,如下所示:

scrapy crawl myspider

当蜘蛛完成时,您可以在控制台上看到它。如果您想导出 CSV,您可以执行以下操作:

scrapy crawl myspider -o filename.csv -t csv

如果你想传递参数,你可以这样做:

class MySpider(BaseSpider):
name = 'myspider'

def __init__(self, url='',):
self.start_urls = [url]
# ...

然后再做:

scrapy crawl myspider -a url=http://myexample.com

关于python - Scrapy CrawlSpider - 仅在第一个 URL 完成后才开始爬行下一个 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34579647/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com