在执行期间计算从 scrapy 中抓取的项目,并在一定数量的页面后暂停或休眠
Count scraped items from scrapy during execution and pause or sleep after a certain number of pages
我有超过 210000 个链接要抓取。有没有什么办法可以打印出它在执行期间完成抓取的链接数量,并在每 10000 页计数后休眠或暂停执行 10 分钟?
如果你只想打印页码,它已经完成了 scrapy 你可以这样做。请记住,Scrapy 不能保证按照生成的顺序解析页面。
def start_requests(self)
for i in range(1,210000):
yield scrapy.Request(
url=f'https://someurl.com?page={str(i)}',
meta={'page': i}
)
def parse(self, response):
page = response.meta.get('page')
print('Parsed page #' + str(page))
如果你想看到“进度”,你可以这样做:
def __init__(self, *args, **kwargs):
self.parsed_pages = 0
self.total_pages = 210000
super().__init__(*args, **kwargs)
def start_requests(self)
for i in range(1, self.total_pages):
yield scrapy.Request(
url=f'https://someurl.com?page={str(i)}',
meta={'page': i}
)
def parse(self, response):
page = response.meta.get('page')
self.parsed_pages += 1
print(f'Parsed {str(self.parsed_pages)} of {str(self.total_pages)}')'
如果你想暂停10分钟,我不建议使用一些睡眠功能。因为那样会阻塞代码。 (如果你没有其他蜘蛛,我想你可以做到,但这不是一个很好的做法)。
相反,我会安排蜘蛛以 运行 为间隔并限制为 10 000 页。
或者,如果您只需要限制发送的请求数量,您可以将 settings.py 中的 DOWNLOAD_DELAY
设置为某个整数,以减少目标服务器上的负载。
反响很好!例如,我正在考虑在 if 语句中使用 sleep。
如果parsed_pages == 100*x
time.sleep(rand(20,150)
否则:
我有超过 210000 个链接要抓取。有没有什么办法可以打印出它在执行期间完成抓取的链接数量,并在每 10000 页计数后休眠或暂停执行 10 分钟?
如果你只想打印页码,它已经完成了 scrapy 你可以这样做。请记住,Scrapy 不能保证按照生成的顺序解析页面。
def start_requests(self)
for i in range(1,210000):
yield scrapy.Request(
url=f'https://someurl.com?page={str(i)}',
meta={'page': i}
)
def parse(self, response):
page = response.meta.get('page')
print('Parsed page #' + str(page))
如果你想看到“进度”,你可以这样做:
def __init__(self, *args, **kwargs):
self.parsed_pages = 0
self.total_pages = 210000
super().__init__(*args, **kwargs)
def start_requests(self)
for i in range(1, self.total_pages):
yield scrapy.Request(
url=f'https://someurl.com?page={str(i)}',
meta={'page': i}
)
def parse(self, response):
page = response.meta.get('page')
self.parsed_pages += 1
print(f'Parsed {str(self.parsed_pages)} of {str(self.total_pages)}')'
如果你想暂停10分钟,我不建议使用一些睡眠功能。因为那样会阻塞代码。 (如果你没有其他蜘蛛,我想你可以做到,但这不是一个很好的做法)。
相反,我会安排蜘蛛以 运行 为间隔并限制为 10 000 页。
或者,如果您只需要限制发送的请求数量,您可以将 settings.py 中的 DOWNLOAD_DELAY
设置为某个整数,以减少目标服务器上的负载。
反响很好!例如,我正在考虑在 if 语句中使用 sleep。
如果parsed_pages == 100*x time.sleep(rand(20,150) 否则: