@3143dec
Студент-программист

Как спарсить динамическую страницу на C#?

Требуется выполнить парсинг веб-страницы с динамически подгружаемым контентом. Целые части страницы подгружаются с помощью JS кода. Кода этого много и он подвержен обфускации, по этому его проанализировать и переписать на C# не вариант. В интернетах много информации, но по существу мало. Хорошо понимая работу JS, предполагаю, что надо поставить нечто, что воспроизведёт нужную нам информацию, просто дождавшись полной загрузки страницы. Много всего, разные вебдрайверы, фантомжс, селениум, авесомиум и т.д. Но, мало информации о них самих. Реализуемая программа должна выполнять это в потоках, то есть одновременно может быть открыто n-ое кол-во "браузеров", у всех свои куки и т.д. При этом графическое отображение не надо, скажем так, нужен браузер без головы.

Посоветуйте пожалуйста как это сделать, в худшем случее придётся всё это реализовывать через браузер, к примеру, Awesomium.
  • Вопрос задан
  • 1235 просмотров
Решения вопроса 1
@3143dec Автор вопроса
Студент-программист
Решение: в моём случае было много обфусцированного кода на самой странице, в js'е. Иначе, можно было бы, как говорилось выше, использовать разные решения:
  1. Выполнить js прямо в коде C# - Jint, JavaScriptdotNet, руки (На хабре прекрасная статья есть: https://habrahabr.ru/post/115021/)
  2. Отловить все ссылочки, с которыми работает JS, Ajax и пр., и отправить запросы именно по этим ссылкам. - Fiddler, Wireshark, Charles.
  3. Использовать HeadLess Browser. Скажем так, браузер без UI. (я использовал phantomjs - phantomjs.org/)


Я для своей задачи использовал PhantomJS + Selenium. Технологии развиваются, есть некоторые вещи которые не реализованы, мало чёткой документации. Если будут вопросы - обращайтесь :)
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
Rou1997
@Rou1997
Из headless-браузеров один из лучших phantom.js, он специально для этого предназначен.

Но:
Хорошо понимая работу JS, предполагаю, что надо поставить нечто, что воспроизведёт нужную нам информацию, просто дождавшись полной загрузки страницы.

Не обязательно! И работу JS не так и хорошо знаете, если данные загружаются с помощью AJAX, то не обязательно выполнять JS, можно просто симитировать эти HTTP-запросы, а чтобы понять что имитировать, есть снифферы - Fiddler, Wireshark, Charles, в конце-концов DevTools в браузере.

Но, мало информации о них самих.

То, что вы хотите, сродни реверс-инжинирингу, поэтому информацию ищите прежде всего в голове, в виде навыков и знаний! Тренируйтесь!
Ответ написан
Если данные через js подгружаются ajax запросом, можно через fiddler найти урлы, по которым запрашиваются нужные Вам данные и обращаться за ними напрямую, без парсинга страницы
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы