gpt4 book ai didi

python - 完成一个约会,然后再进行另一个约会

转载 作者:行者123 更新时间:2023-11-30 22:39:55 25 4
gpt4 key购买 nike

我正在进行搜索,需要提交一个日期的表单,抓取一堆结果,然后转到下一个日期。

在我的解析方法中,我将循环遍历日期,并为每次搜索提交表单。每次搜索都会引发数百个请求。

有没有办法在我搜索下一个日期之前等待这些请求完成?我需要能够跟踪爬网程序退出时已完成的日期。

class DateSpider(scrapy.Spider):

def parse(self, response):
start_date = datetime.date(2012, 1, 1)
end_date = datetime.date(2012, 12, 31)
delta = datetime.timedelta(days=1)

d = start_date
while d <= end_date:
form_date = d.strftime('%m/%d/%Y')
yield scrapy.FormRequest.from_response(
response,
formdata={'avEntryDate': form_date},
callback=self.parseDateSearchResult,
)
d += delta

def parseDateSearchResult(self, response):
# table that creates an additional 500 requests
# I want these requests to complete before I queue the next dates 500 requests

我想防止数十万个请求排队,特别是因为我需要缓慢地爬行,并且整个爬行不可能在一次运行中完成。有没有更好的方法来一次抓取这个?

想法 - 你可以运行一个蜘蛛程序,等待它完成,然后使用不同的参数再次启动蜘蛛程序吗?

最佳答案

关于等待蜘蛛“完成”然后重新开始,是的,你可以用spider_idle signal来做到这一点当蜘蛛没有更多工作要做时,它会等待,我认为这个蜘蛛(当然经过您的修改)应该适合您:

class WaitDateSpider(Spider):

def __init__(self, *args, **kwargs):

self.current_date = datetime(2012, 1, 1)
self.end_date = datetime(2012, 12, 31)
super(WaitDateSpider, self).__init__(*args, **kwargs)

self.crawler.signals.connect(self.spider_idle, signal=signals.spider_idle)

start_urls = ['http://initialurl.com']

initial_response = None

def create_date_request(self, response, date):
return FormRequest.from_response(
response,
formdata={'avEntryDate': date},
callback=self.parse_date_search_results,
)

def parse(self, response):
self.initial_response = response
yield self.create_date_request(response, self.current_date)

def parse_date_search_results(self, response):
pass

def spider_idle(self, spider):
if self.current_date < self.end_date:
self.current_date += timedelta(days=1)
self.crawler.engine.crawl(self.create_date_request(self.initial_response, self.current_date), spider)

检查信号方法是否实际上产生请求,而是使用crawler.engine将请求添加到其队列中。

我还添加了 initial_response 属性,因为您正在使用 from_response 方法创建 FormRequest

关于python - 完成一个约会,然后再进行另一个约会,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43010014/

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