Скрапинг контента, который иногда виден, но не виден другим

Я собираю некоторую информацию с zappos.com, в частности часть страницы сведений, которая показывает, что также просматривали клиенты, просматривающие текущий элемент.

Это список одного из таких предметов: https://www.zappos.com/p/chaco-marshall-tartan-rust/product/8982802/color/725500

Дело в том, что я обнаружил, что раздел, который я очищаю, появляется сразу на некоторых элементах, а на других он появляется только после того, как я обновил страницу 2 или 3 раза.

Я использую scrapy для очистки и всплеск для рендеринга.

import scrapy
import re
from scrapy_splash import SplashRequest

class Scrapys(scrapy.Spider):
    name = "sqs"
    start_urls = ["https://www.zappos.com","https://www.zappos.com/marty/men-shoes/CK_XAcABAuICAgEY.zso"]
    def start_requests(self):
        for url in self.start_urls:
            yield SplashRequest(url, self.parse,
                endpoint='render.html',
                args={'wait': 0.5},
            )

    def parse(self, response):
        links = response.css("div._1Mgpu")
        for link in links:
            url = 'https://www.zappos.com' + link.css("a::attr(href)").extract_first()
            yield SplashRequest(url, callback=self.parse_attr,
                endpoint='render.html',
                args={'wait': 10},
            )


    def parse_attr(self, response):
        alsoviewimg = response.css("div._18jp0 div._3Olkk div.QDcUX div.slider div.slider-frame ul.slider-list li.slider-slide a img").extract()

Также viewimg является одним из элементов, которые я извлекаю из раздела «Клиенты, которые просматривали этот товар, также просматривали». Я протестировал извлечение этого и других элементов, все в оболочке scrapy с рендерингом заставки, чтобы получить динамический контент, и он отлично вытащил контент, однако в пауке он редко, если вообще когда-либо, получает какие-либо хиты.

Есть ли что-то, что я могу настроить, чтобы он загружал страницу пару раз, чтобы получить контент? Или что-то еще, чего мне не хватает?


person jkatt    schedule 20.04.2018    source источник
comment
С перезагрузкой страницы я смог получить больше элемента, который я ищу. Однако, проводя некоторое тестирование, я обнаружил, что селен работает без перезагрузки URL-адреса в программе, поскольку он сразу нашел элемент. Я не уверен, в чем разница между рендерингом страницы Splash и рендерингом Selenium, но если бы я мог найти его, это помогло бы мне создать парсер, который быстрее, чем использование селена.   -  person jkatt    schedule 29.04.2018


Ответы (1)


Вы должны проверить, существует ли элемент, который вы ищете. Если это не так, загрузите страницу снова.

Я бы посмотрел, почему для обновления страницы требуется несколько попыток, возможно, вы сможете решить проблему без этого специального решения для многократного обновления.

Scrapy Как проверить, существует ли определенный класс в данном элементе

Эта ссылка объясняет, как узнать, существует ли класс.

person Daniel Paczuski Bak    schedule 20.04.2018
comment
Аааа даже не подумал перезагрузить страницу, есть ли у scrapy особый метод перезагрузки страниц? Я немного покопался в том, почему он появляется только иногда, и до сих пор ничего не дал. - person jkatt; 25.04.2018
comment
Я сам не использовал scrapy, но я думаю, что вы можете использовать scrapy.request() для загрузки страницы. Просто повторяйте это, пока не найдете нужный элемент. Дайте мне знать, если это работает. - person Daniel Paczuski Bak; 25.04.2018
comment
Поэтому я должен проверить, существует ли div, и не использует ли он response.request.url для получения текущего URL-адреса и перезапустить его анализ. Кажется, это сделало это, однако теперь это намного медленнее. Нужно найти способ понять, почему для его отображения требуется несколько загрузок. - person jkatt; 25.04.2018