Как сканировать динамически сгенерированные данные в результатах поиска в интернет-магазине Google - PullRequest
0 голосов
/ 07 июля 2019

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

Я хочу периодически находить рейтинг расширения.Вот URL

Проблема в том, что я не могу обработать динамические данные, сгенерированные кодом Javascript в ответе от сервера.

Я пытался использовать Scrapyи Scrapy-Splash для отображения нужной страницы, но я все еще получал тот же ответ.Я использовал Docker для запуска экземпляра контейнера scrapinghub/splash на порту 8050.Я даже посетил веб-страницу http://localhost:8050 и ввел свой URL-адрес вручную, но он не смог отобразить данные, хотя сообщение показало успех.

Вот код, который я написал для сканера.На самом деле он ничего не делает, и его единственная задача - извлечь HTML-содержимое нужной страницы.

import scrapy
from scrapy_splash import SplashRequest

class WebstoreSpider(scrapy.Spider):
    name = 'webstore'

    def start_requests(self):
        yield SplashRequest(
            url='https://chrome.google.com/webstore/search/netflix%20vpn?utm_source=chrome-ntp-icon&_category=extensions',
            callback=self.parse,
            args={
                "wait": 3,
            },
        )

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

и содержимое settings.py моего Scrapy проекта:

BOT_NAME = 'webstore_cralwer'

SPIDER_MODULES = ['webstore_cralwer.spiders']
NEWSPIDER_MODULE = 'webstore_cralwer.spiders'

ROBOTSTXT_OBEY = False

SPLASH_URL = 'http://localhost:8050'
DOWNLOADER_MIDDLEWARES = {
    'scrapy_splash.SplashCookiesMiddleware': 723,
    'scrapy_splash.SplashMiddleware': 725,
    'scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware': 810,
}
SPIDER_MIDDLEWARES = {
    'scrapy_splash.SplashDeduplicateArgsMiddleware': 100,
}
DUPEFILTER_CLASS = 'scrapy_splash.SplashAwareDupeFilter'

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

Любая помощь приветствуется.

1 Ответ

0 голосов
/ 08 июля 2019

У меня работает небольшой нестандартный скрипт lua:

lua_source = """
     function main(splash, args)
     assert(splash:go(args.url))
     assert(splash:wait(5.0))
     return {
        html = splash:html(),
     }
     end
"""

Затем вы можете изменить свои start_requests следующим образом:

def start_requests(self):
        yield SplashRequest(
            url='https://chrome.google.com/webstore/search/netflix%20vpn?utm_source=chrome-ntp-icon&_category=extensions',
            callback=self.parse,
            args={'lua_source': self.lua_source},
        )
...