Я пытаюсь отсканировать веб-сайт с использованием аквариума и аквариума, последний является балансировщиком нагрузки, который обрабатывает несколько экземпляров spla sh для рендеринга javascript. Я управляю аквариумом, используя docker -состав, и он работает нормально. Я могу от go до http://localhost: 8050 в моем браузере, и он отображает веб-сайт, который я ищу, просто отлично, но когда я пытаюсь запустить его с помощью scrapy, он не может подключиться к аквариуму, даже если он находится в мой файл settings.py.
settings.py:
SPLASH_URL = 'http://localhost:8050'
bhid_crawler.py:
class BhidCrawlerSpider(scrapy.Spider):
name = 'bhid_crawler'
allowed_domains = ['www.bhid.com']
start_urls = ['https://www.bhid.com/']
def __init__(self):
# Bhid is a class I defined containing all the css selectors I use
self.site = Bhid('https://www.bhid.com/', "bhid.com", 'https://www.bhid.com/')
self.proxy_pool = [*** my proxies ***]
def get_request(self, url, callback, cb_kwargs=None):
if(cb_kwargs is None):
req = SplashRequest(
url=url,
callback=callback,
)
else:
req = SplashRequest(
url=url,
callback=callback,
cb_kwargs=cb_kwargs,
)
if self.proxy_pool:
req.meta['splash']['args']['proxy'] = random.choice(self.proxy_pool)
return req
def start_requests(self):
yield self.get_request("https://www.bhid.com/", self.parse)
Вывод из аквариума:
splash2_1 | 2020-01-26 20:48:21.691459 [-] "172.18.0.6" - - [26/Jan/2020:20:48:21 +0000] "GET / HTTP/1.0" 200 7677 "-" "-"
splash0_1 | 2020-01-26 20:48:22.550365 [-] "172.18.0.6" - - [26/Jan/2020:20:48:22 +0000] "GET / HTTP/1.0" 200 7677 "-" "-"
splash1_1 | 2020-01-26 20:48:22.705081 [-] "172.18.0.6" - - [26/Jan/2020:20:48:22 +0000] "GET / HTTP/1.0" 200 7677 "-" "-"
splash2_1 | 2020-01-26 20:48:23.695439 [-] "172.18.0.6" - - [26/Jan/2020:20:48:23 +0000] "GET / HTTP/1.0" 200 7677 "-" "-"
splash0_1 | 2020-01-26 20:48:24.556259 [-] "172.18.0.6" - - [26/Jan/2020:20:48:24 +0000] "GET / HTTP/1.0" 200 7677 "-" "-"
splash1_1 | 2020-01-26 20:48:24.713621 [-] "172.18.0.6" - - [26/Jan/2020:20:48:24 +0000] "GET / HTTP/1.0" 200 7677 "-" "-"
splash2_1 | 2020-01-26 20:48:25.703036 [-] "172.18.0.6" - - [26/Jan/2020:20:48:25 +0000] "GET / HTTP/1.0" 200 7677 "-" "-"
Как видите, несмотря на то, что scrapy должен подключаться к localhost: 8050 и использовать аквариум, в файлах журнала аквариума нет доказательств этого.
Вывод из запущенного сканирования scrapy bhid_crawler:
2020-01-26 12:49:36 [scrapy.core.engine] INFO: Spider opened
2020-01-26 12:49:36 [scrapy.extensions.logstats] INFO: Crawled 0 pages (at 0 pages/min), scraped 0 items (at 0 items/min)
2020-01-26 12:49:36 [scrapy.extensions.telnet] INFO: Telnet console listening on 127.0.0.1:6023
2020-01-26 12:49:36 [scrapy.core.engine] DEBUG: Crawled (200) <GET https://www.bhid.com/> (referer: None)
2020-01-26 12:49:37 [scrapy.core.engine] INFO: Closing spider (finished)
2020-01-26 12:49:37 [scrapy.statscollectors] INFO: Dumping Scrapy stats:
{'downloader/request_bytes': 260,
'downloader/request_count': 1,
'downloader/request_method_count/GET': 1,
'downloader/response_bytes': 22813,
'downloader/response_count': 1,
'downloader/response_status_count/200': 1,
'elapsed_time_seconds': 0.939478,
'finish_reason': 'finished',
'finish_time': datetime.datetime(2020, 1, 26, 20, 49, 37, 82079),
'log_count/DEBUG': 1,
'log_count/INFO': 10,
'memusage/max': 55746560,
'memusage/startup': 55746560,
'response_received_count': 1,
'scheduler/dequeued': 1,
'scheduler/dequeued/memory': 1,
'scheduler/enqueued': 1,
'scheduler/enqueued/memory': 1,
'start_time': datetime.datetime(2020, 1, 26, 20, 49, 36, 142601)}
2020-01-26 12:49:37 [scrapy.core.engine] INFO: Spider closed (finished)
Как видите, он просто делает один запрос и затем завершает работу, потому что возвращает пустой список для элементов, которые я ищу, так как они отображаются javascript.
Короче говоря, как я могу подключить скрап к аквариуму, чтобы я мог отображать javascript на веб-сайтах?