Как соединить scrapy-spla sh с аквариумом - PullRequest
0 голосов
/ 27 января 2020

Я пытаюсь отсканировать веб-сайт с использованием аквариума и аквариума, последний является балансировщиком нагрузки, который обрабатывает несколько экземпляров 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 на веб-сайтах?

...