scrapy-spla sh возвращает нет javascript версия страницы - PullRequest
1 голос
/ 03 февраля 2020

Я использую scrapy-spla sh через docker для доступа к этой странице: https://finance.yahoo.com/quote/NFLX/options?p=NFLX

Скрипт работает (вроде!), Однако страница в ответе указано class="NoJs chrome featurephone", и он не содержит всех полей, которые я хочу извлечь.

Это мои настройки:

# -*- coding: utf-8 -*-

# Scrapy settings for yahoo_options project
#
# For simplicity, this file contains only settings considered important or
# commonly used. You can find more settings consulting the documentation:
#
#     https://docs.scrapy.org/en/latest/topics/settings.html
#     https://docs.scrapy.org/en/latest/topics/downloader-middleware.html
#     https://docs.scrapy.org/en/latest/topics/spider-middleware.html

BOT_NAME = 'yahoo_options'

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

# ScrapySplash settings
SPLASH_URL = 'http://localhost:8050'

# Enable or disable spider middlewares
# See https://docs.scrapy.org/en/latest/topics/spider-middleware.html
SPIDER_MIDDLEWARES = {
    'scrapy_splash.SplashDeduplicateArgsMiddleware': 100,
}

# Enable or disable downloader middlewares
# See https://docs.scrapy.org/en/latest/topics/downloader-middleware.html
DOWNLOADER_MIDDLEWARES = {
    'scrapy_splash.SplashCookiesMiddleware': 723,
    'scrapy_splash.SplashMiddleware': 725,
    'scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware': 810,
}

# set custom dupfilter class for Splash
DUPEFILTER_CLASS = 'scrapy_splash.SplashAwareDupeFilter'

# Crawl responsibly by identifying yourself (and your website) on the user-agent
USER_AGENT = 'Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; Googlebot/2.1; +http://www.google.com/bot.html) Chrome/79.0.3945.123 Safari/537.36'

# Obey robots.txt rules
#ROBOTSTXT_OBEY = True

# Disable Telnet Console (enabled by default)
TELNETCONSOLE_ENABLED = False

# Enable and configure HTTP caching (disabled by default)
# See https://docs.scrapy.org/en/latest/topics/downloader-middleware.html#httpcache-middleware-settings
#HTTPCACHE_ENABLED = True
#HTTPCACHE_EXPIRATION_SECS = 0
#HTTPCACHE_DIR = 'httpcache'
#HTTPCACHE_IGNORE_HTTP_CODES = []
HTTPCACHE_STORAGE = 'scrapy_splash.SplashAwareFSCacheStorage'

Это мой скрипт:

class yahoo_optionsSpider(scrapy.Spider):
    name = 'yahoo_options'
    consent_url = 
    start_urls = ['https://finance.yahoo.com/quote/NFLX/options?p=NFLX']

    def parse(self, response):
        # get list of contract dates
        #options_dates = response.css('div.drop-down-selector > select > option::text').extract()

        print(response.text)

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

Я попытался изменить USER_AGENT со стандартного scrapy на тот, который указан в настройках выше. Я также попытался переключить IP-адреса с помощью VPN, чтобы скрыть, что запрос поступил от экземпляра docker.

Мне удалось добиться того, что я планирую использовать с помощью HTMLSession() из requests_html и хотел выяснить, возможно ли то же самое с Scrapy + Spla sh.

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

...