scrapy一遍又一遍地抓住同一个网址

时间:2017-10-27 00:28:31

标签: python web-scraping scrapy

我有一个通过URL递归循环的scrapy函数,在每次迭代时,我得到一个包含HTML页面的JSON响应和一个用作参数的数字来调用相同的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)

0 个答案:

没有答案