Как получить ответ при нажатии кнопки «Показать больше» на веб-сайте Aljazeera (раздел новостей) с помощью scrapy - PullRequest
0 голосов
/ 27 мая 2020

Я пытаюсь получить около 500 URL-адресов из Раздел новостей Aljazeera , но есть кнопка «Показать больше», которую нужно нажать, чтобы загрузить больше URL-адресов.

Итак, мой вопрос в том, как мы можем получить около 500 URL-адресов, динамически загружая больше URL-адресов с помощью scrapy. Я пробовал один метод, в котором я проверяю раздел сети и вижу, какой URL-адрес запрашивается при нажатии кнопки «Показать больше», а именно:

https://www.aljazeera.com/portal/handlers/HTMLParser.ashx?cmd=ajax&cmdtext=D2AEAD90362EBA2D588998BF152C2F79DD26DD0D31E21DA70A3CFEE7740AAE94D00F5DDC3D2ACA9000ECE8E27805D90958376CCB0BA2DAD4EB1E8C0843F0138C61A7EAC6B632D9A4BF445D038A1D6BA659088252C6873F8DE1D5A4BAF8A7675695BBC6CCA28A12E106043AA97B9AF6F5E165A0A2C8CCF71C3DD8C512667E1F7B&pageid=161023134902510

Это - это ответ

image

Он возвращает блоки div, содержащие новые URL-адреса и кнопку «показать больше» с измененным cmdtext, и я выяснил, что только cmdtext изменяется, когда мы хотим снова нажать кнопку «Show More»

Итак, я получаю cmdtext «Показать больше кнопки», используя код ниже:

cmdtext = response.css('#btn_showmore_b1_418::attr(cmdtext)').extract_first()

Но когда я пытаюсь запросить URL-адрес, используя код ниже:

yield scrapy.Request(url='https://www.aljazeera.com/portal/handlers/HTMLParser.ashx?cmd=ajax&cmdtext=%s&pageid=161023134902510' % cmdtext)

Я не получение любого ответа

Вот мой код

import scrapy


class ArticlesSpider(scrapy.Spider):
    name = 'articles'

    start_urls = ['https://www.aljazeera.com/news/']
    download_delay = 3


    urls_list = []

    def parse(self, response):
        print(response.body)

        urls = response.css('div.col-sm-7.topics-sec-item-cont a:nth-child(2)::attr(href)').extract()
        self.urls_list.append([url for url in urls])

        print(self.urls_list)
        cmdtext = response.css('#btn_showmore_b1_418::attr(cmdtext)').extract_first()

        request = scrapy.Request(url='https://www.aljazeera.com/portal/handlers/HTMLParser.ashx?cmd=ajax&cmdtext=%s&pageid=161023134902510' % cmdtext, method='POST')


        yield request

Любая помощь будет принята с благодарностью. Спасибо!

...