Использование Splash с Scrapy для подтверждения прессы - PullRequest
0 голосов
/ 04 сентября 2018

Я пытаюсь нажать кнопку, используя всплеск, а затем сканировать сайт с помощью scrapy.CrawlSpider. Выполнение скрипта Lua в браузере дает ожидаемый результат (нажатие кнопки). Когда я использую SplashRequest, у меня появляется следующая ошибка:

2018-09-04 14:58:18 [scrapy.core.scraper] ERROR: Error downloading <GET https://auto.ru/moskva/cars/used/?sort=fresh_relevance_1-desc&page=99 via http://127.0.0.1:8050/execute>
Traceback (most recent call last):
  File "/home/kpalyanichka/anaconda3/lib/python3.6/site-packages/scrapy/core/downloader/middleware.py", line 43, in process_request
    defer.returnValue((yield download_func(request=request,spider=spider)))
ValueError: invalid hostname: 'Mozilla

Мой код ниже:

Всплеск:

function main(splash, args)
    splash:init_cookies(splash.args.cookies)
    local jquery_url = "http://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"
    assert(splash:autoload(jquery_url))
    local host =  args.proxy_host
    local port = args.proxy_port
    splash:on_request(function (request)
       request:set_proxy{host, port}
    end)
    splash:go{"https://auto.ru"}
    splash:wait(5)
    splash:runjs([[
     if($("#confirm-button")==null){
        console.log("buttons not found")
      }
      else {
        $("#confirm-button")[0].click()
        }
    ]])
    assert(splash:wait(0.5))

    return {
        html = splash:html()
        }
end

Scrapy:

def parse_splash(self, response):
    print(response)

def parse_test(self, response):
    proxy_host = '125.141.200.45' 
    proxy_port = '80'  
    yield SplashRequest(response.url, callback=self.parse_splash,
    args={
    "url": response.url,
    "lua_source": btn_click_sc,
    "proxy_host": proxy_host,
    "proxy_port": proxy_port,
    "timeout": 60,
    "wait": 15,
    "render_all": 1,
    },
    endpoint='execute',
    cache_args=['lua_source'],
    # headers=h,
    priority=10,  dont_filter=True
    )

и настройки из библиотечных примеров

SPLASH_URL = 'http://127.0.0.1:8050'

DOWNLOADER_MIDDLEWARES = {
    'scrapy_splash.SplashCookiesMiddleware': 723,
    'scrapy_splash.SplashMiddleware': 725,
    'scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware': 810,
}

SPIDER_MIDDLEWARES = {
    'scrapy_splash.SplashDeduplicateArgsMiddleware': 100,
}

Также в терминале я не вижу всплывающих журналов, когда гусеничный робот работает

Используя запросы Python, я могу успешно выполнить этот скрипт-всплеск

...