Как извлечь данные, которые по-разному загружаются с помощью scrapy - PullRequest
0 голосов
/ 01 ноября 2018

Я пытаюсь извлечь отзывы о товарах по таким URL-адресам, как этот

https://www.namastevaporizers.com/products/mighty-vaporizer

Паук, который у меня есть, извлекает что-нибудь на странице, но ничего из комментариев, я думаю, это потому, что комментарии загружаются по-разному, но, к сожалению, на этом мои знания о лоскутках заканчиваются. Кто-нибудь может мне помочь с этим?

вот мой паук

    import scrapy
    from scrapy.loader import ItemLoader
    from scrapy.loader.processors import TakeFirst, MapCompose
    from scrapy.spiders import Spider
    from Namaste.items import NPPItem

   class NPP(Spider):
name = 'Product_Pages'
start_urls = ['https://www.namastevaporizers.com/products/mighty-vaporizer'

def parse(self, response):
    item_loader = ItemLoader(item=NPPItem(), response=response)

    item_loader.add_css("Z_reviews", "div.yotpo-user-name") # gets nothing
    item_loader.add_css("Z_reviews", "div.content-title") # gets nothing
    item_loader.add_css("Z_reviews", "div.content-review") # gets nothing
    item_loader.add_css("Z_reviews", "div.yotpo") # gets some data but missing most stuff, this is the entire yotpo content wrapper

    item_loader.add_value("AAE_source_url", response.url) #works fine

    return item_loader.load_item()

1 Ответ

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

обзоры на этом сайте загружаются JS, поэтому вам нужно подделать запрос, как ваш хром делает

Следуя этим шагам, вы получите результат

  1. откройте инструмент Chrome для разработчиков, перейдите на вкладку сети, выполните поиск (обратите внимание: это поиск, а не фильтр) в содержании обзора, вы увидите запрос (Я получил запрос URL: https://staticw2.yotpo.com/batch)
  2. Скопируйте команду curl в chrome
  3. Выполнить curl в оболочке, если он успешен, следующий шаг - разобрать curl и подделать его в коде python (curl на самом деле работает на этом сайте, я пробовал)

  4. Вы можете разобрать завиток в https://curl.trillworks.com/#python

...