Во первых можно использовать splash в придачу к scrapy.
Во вторых вы можете сами из scrapy послать запрос, получить Javascript который вам нужен и его распарсить.
Есть крутая защита от distil networks, которая проверяет кучу переменных браузера, в т.ч. как он рендерит видео и многое другое.
Если знать, что выполняет Javascript и что нужно отдать, то и такие защиты можно обходить.
У scrapy прекрасные возможности из коробки.
По опыту парсинга более 500 сайтов все можно имитировать. И ajax и заголовки разные и прочее.
Selenium это по сути инструмент для управления браузером изначально предназначен для тестирования а не парсинга.
Данные хранятся в базах у сервиса, почему не хочет вам отдавать? Да ровно потому-что обычные люди не ходят дальше 10й страницы и выкладывать их - значит отдавать парсерам.
Используйте фильтры, разбивайте запрос на подзапросы, чтобы уменьшать количество объектов за один запрос.
Врать не буду, pyspider не использовал, однако тут вот поднимали вопрос, и мой коллега грамотно всё расписал в первом ответе: https://www.quora.com/How-does-pyspider-compare-to...
Насчёт lxml - это низкоуровневая вещь, и scrapy по сути использует его-же для запросов, однако у скрапи есть та-же самая многопоточность, и много чего ещё сверху надстроено.
Обычно через время. Вообще, если там не настроен самый высокий уровень защиты, то можно обходить это, отправляя правильный запрос перед каждым запросом на данные.
Pogran, ну, если честно, сам его не использовал для своих сайтов, я скорее по другую сторону баррикад :)
Знаю точно, что у них есть разные уровни защиты, эту систему используют многие большие сайты директории типа manta.com indieGoGo. При максимальном уровне защиты обойти её невероятно сложно, потому-что там используется сложный обфусцированный java script, которые анализирует кучу переменных из браузера начиная от простых заголовков и заканчивая локальным временем, и рендерингом графических объектов. Меня он палил даже когда я скрипты автоматизации через selenium писал.
Если я вообще всё правильно понимаю, то вам нужны данные из второго как раз запроса.
Авторизация на сайтах почти всегда именно так и работает, после POST идёт 302 c редиректом, который устанавливает cookies и отдаёт данные.
bl: Почти все эти зашифрованные API можно подделать.
Возьмём на примере linkedin.
Чтобы нормально отправлять запросы надо собрать хитрый заголовок. Он составляется из двух параметров. Один берётся из исходного кода страницы, второй вычленяется из cookie после авторизации.
Однако прекрасно собирается и работает.
На данный момент сайты, с которыми реально практически невозможно взаимодействовать через scrapy - это те, которые защищены by Distil Networks. Хотя на одном из таких сайтов я и с selenium'ом встрял.
bl: Либо делаете вручную (например, смотрите firebug куда что идёт, мне этого метода хватает на 95% сайтов). Если совсем сложные запросы - можно попробовать использовать Splash, это такой "прокси" от разработчиков того-же scrapy, который рендерит JS и отдаёт вам страницу.