Как запустить scrapy splash на виртуальной машине с linux? По сути, у меня есть скрипт lua, который требует от меня отправлять ключи на сайт для входа, а затем скрейпать его.
Я установил Docker, однако не могу заставить работать Scraper, так как он не подключается к серверу.
Есть ли какие-то простые шаги, которые я могу выполнить, чтобы это заработало на виртуальной машине? Например, что мне следует установить, и что мне следует сделать дальше перед запуском scrapy crawl spider
.
Что касается docker, то в режиме администратора я реализовал следующее:
docker run -p 8050:8050 scrapinghub/splash --max-timeout 3600
Однако это в настоящее время запущено, и я хотел бы, чтобы это работало в фоновом режиме. Я не могу понять это; я пробовал:
docker run -d 8050:8050 scrapinghub/splash --max-timeout 3600
Но я просто получаю ошибку:
Unable to find image '8050:8050' locally
Я считаю, что это может решить мою проблему, а может и нет, и мне нужны дополнительные установки. Пожалуйста, дайте мне знать! Мне действительно нужно экспертное руководство, чтобы разобраться с этим.
Я открыл еще один экземпляр, пока Docker был запущен на первом экземпляре.
При запуске сканера Scrapy возникает следующая ошибка:
2022-02-16 02:55:26 [scrapy_splash.middleware] WARNING: Bad request to Splash: {'error': 400, 'type': 'ScriptError', 'description': 'Error happened while executing Lua script', 'info':
{'type': 'JS_ERROR', 'js_error_type': 'TypeError', 'js_error_message': 'null is not an object (evaluating \'document.querySelector("button:nth-child(2)").getClientRects\')', 'js_error':
'TypeError: null is not an object (evaluating \'document.querySelector("button:nth-child(2)").getClientRects\')', 'message': '[string "..."]:12: error during JS function call: \'TypeEr
ror: null is not an object (evaluating \\\'document.querySelector("button:nth-child(2)").getClientRects\\\')\'', 'source': '[string "..."]', 'line_number': 12, 'error': 'error during JS
function call: \'TypeError: null is not an object (evaluating \\\'document.querySelector("button:nth-child(2)").getClientRects\\\')\''}}
2022-02-16 02:55:26 [scrapy.core.engine] DEBUG: Crawled (400) <GET http://instagram.com/ via http://localhost:8050/execute> (referer: None)
2022-02-16 02:55:26 [scrapy.spidermiddlewares.httperror] INFO: Ignoring response <400 http://instagram.com/>: HTTP status code is not handled or not allowed
Скребок прекрасно работает на моем Mac, так что я определенно где-то что-то упускаю из установки.
решение1
Вам придется использовать следующую docker
команду:
docker run -d -p 8050:8050 scrapinghub/splash --max-timeout 3600
Вы забыли -p
параметр для переадресации порта, из-за чего Docker предположил, что 8050:8050
это имя образа, который вы пытаетесь запустить.
Я даже никогда не слышал о Scrapy, но это довольно простая ошибка, не нужноэкспертное руководство;)
Что касается "Как мне запустить x?", то в целом этот вопросмногослишком расплывчато для сайта QA, такого как SuperUser. Я бы рекомендовал вам попробовать вышеизложенное, и если у вас возникнут последующие ошибки, вы создадите для них отдельные вопросы.