Как сделать следующую страницу, если она использует Javascript в Scrapy - PullRequest
0 голосов
/ 04 апреля 2019

У меня проблема со сканированием следующей кнопки. Я попробовал базовую кнопку, но после проверки HTML-кода, она использует javascript. Я попробовал другие правила, но ничего не работает, вот ссылка на сайт.

https://www2.hm.com/en_us/sale/shopbyproductladies/view-all.html

Следующее название кнопки «Загрузить другие товары»

вот мой рабочий код

def parse(self, response):
    for product_item in response.css('li.product-item'):
        url = "https://www2.hm.com/" + product_item.css('a::attr(href)').extract_first() 
        yield scrapy.Request(url=url, callback=self.parse_subpage)

def parse_subpage(self, response):
    item = {
    'title': response.xpath("normalize-space(.//h1[contains(@class, 'primary') and contains(@class, 'product-item-headline')]/text())").extract_first(),
    'sale-price': response.xpath("normalize-space(.//span[@class='price-value']/text())").extract_first(), 
    'regular-price': response.xpath('//script[contains(text(), "whitePrice")]/text()').re_first("'whitePrice'\s?:\s?'([^']+)'"),
    'photo-url': response.css('div.product-detail-main-image-container img::attr(src)').extract_first(),
    'description': response.css('p.pdp-description-text::text').extract_first()

        }   
    yield item

1 Ответ

1 голос
/ 04 апреля 2019

Как уже указывалось в комментариях, нет необходимости задействовать JavaScript вообще. Если вы зайдете на страницу и откроете инструменты разработчика вашего браузера, вы увидите, что происходят такие XHR-запросы:

https://www2.hm.com/en_us/sale/women/view-all/_jcr_content/main/productlisting_b48c.display.json?sort=stock&image-size=small&image=stillLife&offset=36&page-size=36

Эти запросы возвращают данные JSON, которые затем отображаются на странице с использованием JavaScript. Таким образом, вы можете просто извлечь данные из этих URL, используя что-то вроде json.dumps(response.text) Контролируйте продукты, возвращаемые с помощью параметров offset и page-size. Я предполагаю, что вы сделали, когда вы получите пустой JSON. Или вы можете установить offset=0 и page-size=9999, чтобы получить данные за один раз (9999 - это просто произвольное число, которого достаточно в данном конкретном случае).

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