我有一个scrapy函数,它递归地循环通过一个URL,每次迭代我都会得到一个JSON响应,其中包含HTML页面和一个数字,我用它作为参数调用同一个URL来获取新数据等等。。。在
问题是,在第二次迭代中,我没有更新响应对象(下一次迭代将包含第一次迭代的旧响应),因此同一个url被一次又一次地刮走。在
有没有一种方法可以告诉scrapy在得到新的响应之前不要处理它?类似于同步调用,因为每次迭代都将依赖于旧迭代接收到的参数。在
我的代码如下所示:
def parse_tweets(self, response):
while(self.keepScroll):
#convert response
data = json.loads(response.text)
selector = Selector(text=data['items_html'], type='html')
#extract next position parameter
nextPosition = data['min_position'].split('-')
nextPosition = 'TWEET-'+nextPosition[1] + '-' + nextPosition[2]
#extract data
comments_react = self.stats_extractor('reply', selector)
retweet_react = self.stats_extractor('retweet', selector)
favorite_react = self.stats_extractor('favorite', selector)
tweets = selector.xpath('.//*[contains(@class,"js-stream-item stream-item stream-item")]/div[1]/div[2]/div[2]/p/text()').extract()
tweetdates = selector.xpath('.//*[contains(@class,"js-stream-item stream-item stream-item")]/div[1]/div[2]/div[1]/small/a/span[1]/text()').extract()
yield {
'comments' : comments_react,
'retweets' : retweet_react,
'favorites' : favorite_react,
'teweets' : tweets,
'tweetDates' : tweetdates,
}
#update parameter to get next data
self.get_params['max_position'] = nextPosition
self.keepScroll = data['has_more_items']
#call the new API with the nex parameters
yield Request(self.tweetAPIGetParams[0]+'?'+urlencode(self.get_params), callback=self.parse_tweets,dont_filter=True,cookies=self.API_Cookies,headers=self.params)
目前没有回答
相关问题 更多 >
编程相关推荐