抓取相同的网址和

2024-09-24 22:18:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个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)

Tags: textselfdivdatastreamresponsestatsposition