我想根据抓取的页面数和已下载的总MB来限制广泛的抓取工具。
我认为有两种设置CLOSESPIDER_PAGECOUNT和CLOSESPIDER_ITEMCOUNT可以有效地限制抓取的页面数。我希望这两个行为相同,因为我每页有1个项目。这些都不能正常工作。有趣的是,将它们各自限制为10,在一种情况下为我提供25页,在另一种情况下为34页。代码如下。
class mySpider(scrapy.spiders.CrawlSpider):
name = 'mySpider'
rules = [
Rule(
LinkExtractor(
canonicalize=True,
unique=True,
),
follow=True,
callback="parse_items",
process_links='filter_links'
)
]
def __init__(self, start_urls, allowed_domains):
self.start_urls = start_urls
self.allowed_domains = allowed_domains
def parse_items(self, response):
self.save_page_contents(response)
items = self.prepare_items(response)
yield items
def filter_links(self, links):
for link in links:
if any(domain in link.url for domain in self.allowed_domains):
yield link
我通过使用CrawlerProcess指定上述设置来运行搜寻器。
我认为问题出在我过滤链接的方式上。我知道我只是在使用允许的链接进行过滤,但没有此filter_links函数,搜寻器就不会停留在给定的域内。我也没有想出一种方法来阻止爬网达到给定的限制。
链接的重复项仅解决问题的page_count部分。大小限制问题尚未解答。