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