Scrapy Splash не может получить данные сайта React - PullRequest
0 голосов
/ 29 апреля 2019

Мне нужен лом этот сайт.Сделано в реакцию так это выглядит.Затем я попытался извлечь данные с помощью scrapy-splash.Мне нужен, например, элемент "a" с классом shelf-product-name.Но ответ - пустой массив.Я использовал аргумент wait примерно за 5 секунд.Но я получаю только пустой массив.

def start_requests(self):
        yield SplashRequest(
            url='https://www.jumbo.cl/lacteos-y-bebidas-vegetales/leches-blancas?page=6',
            callback=self.parse,
            args={'wait':5}
        )

def parse(self,response):
        print(response.css("a.shelf-product-name"))

1 Ответ

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

На самом деле нет необходимости использовать Scrapy Splash, поскольку все необходимые данные хранятся в теге <script> необработанного ответа html в виде данных в формате json:

import scrapy
from scrapy.crawler import CrawlerProcess
import json

class JumboCLSpider(scrapy.Spider):
    name = "JumboCl"
    start_urls = ["https://www.jumbo.cl/lacteos-y-bebidas-vegetales/leches-blancas?page=6"]

    def parse(self,response):
        script = [script for script in response.css("script::text") if "window.__renderData" in script.extract()]
        if script:
            script = script[0]
        data = script.extract().split("window.__renderData = ")[-1]
        json_data = json.loads(data[:-1])
        for plp in json_data["plp"]["plp_products"]:
            for product in plp["data"]:
                #yield {"productName":product["productName"]} # data from css:  a.shelf-product-name
                yield product

if __name__ == "__main__":
    c = CrawlerProcess({'USER_AGENT':'Mozilla/5.0'})
    c.crawl(JumboCLSpider)
    c.start()
...