Не удается правильно получить min_position в твиттере - PullRequest
0 голосов
/ 11 ноября 2018

Я пытаюсь почистить твиттер. Пожалуйста, введите search.twitter.com и введите Comorbidity в форму поиска. Я могу правильно получить первую страницу, при прокрутке вниз, чтобы увидеть больше твитов, следующую страницу можно получить из параметра 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,
        )

Как я могу получить правильное min_position?

1 Ответ

0 голосов
/ 12 ноября 2018

Я думаю, что вы ошиблись в методе 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 Я надеюсь, что это будет работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...