无法正确获取Twitter上的min_position抓取

时间:2018-11-11 19:03:15

标签: python scrapy

我正在尝试刮推特。 请输入search.twitter.com,并在搜索表中输入合并症。 我可以正确地获得第一页,向下滚动以查看更多推文时,可以从min_position参数获取下一页。 但是,当发送带有下一页的请求时,我无法获得正确的内容。

这是我的一些代码。

headers = {'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36'}

def start_requests(self):
    yield Request(url=self.start_urls[0], callback=self.parse_search_page)

def parse_search_page(self, response):
    keyword = 'Comorbidity'
    search_url = self.search_url.format(keyword=keyword)
    yield Request(url=search_url, callback=self.parse_twitter_page, headers=self.headers)

def parse_twitter_page(self, response):
    next_page = None
    if self.current_page == 0:
        posts = response.xpath('//li[@data-item-type="tweet"]').extract()
        min_position = re.search('data-min-position="(.*?)"', response.body)
        if min_position:
            min_position = min_position.group(1)
        next_page = self.next_page_url.format(position=min_position.replace('cm+', 'cm%2B').replace('==', '%3D%3D'))
        self.current_page = 1
    else:
        json_data = json.loads(response.body)
        min_position = json_data.get('min_position')

    if next_page:
        yield scrapy.http.Request(
            url=self.next_page_url,
            callback=self.parse_twitter_page,
            headers=self.headers,
        )

如何获得正确的最小位置?

1 个答案:

答案 0 :(得分:0)

我认为您在parse_twitter_page方法中出错。

if next_page:
    yield scrapy.http.Request(
        url=next_page,
        callback=self.parse_twitter_page,
        headers=self.headers,
    )

它不应为self.next_page_url。 我从self.next_page_url更改为next_page 我希望这会起作用。