Сканирование веб-страницы в C # - PullRequest
2 голосов
/ 22 декабря 2010

Мне было дано задание сканировать / анализировать и индексировать доступные книги на многих страницах библиотеки. Я обычно использую HTML Agility Pack и C # для анализа содержимого веб-сайта. Одним из них является следующее:

http://bibliotek.kristianstad.se/pls/bookit/pkg_www_misc.print_index?in_language_id=en_GB

Если вы ищете * (все книги), он вернет множество списков книг, разбитых на страницы по 10 книг на странице.

Типичные сканеры, которые я обнаружил, не работают на этом сайте. Я также попытался написать свой собственный сканер, который бы просматривал все ссылки на странице и генерировал переменные post / get для динамического генерирования результатов. Я также не смог этого сделать, в основном из-за 404 ошибок, которые я получаю (хотя я уверен, что сгенерированные ссылки верны).

Сайт использует javascript для генерации контента и использует смешанный режим отправки переменных GET и POST.

Ответы [ 5 ]

3 голосов
/ 22 декабря 2010

Я выхожу на конечность, но попробуйте наблюдать за JavaScript GET и POST с помощью Fiddler , и тогда вы сможете основывать свое сканирование на этих запросах. Fiddler имеет FiddlerCore , который вы можете вставить в свой собственный проект на C #. Используя это, вы можете отслеживать запросы, сделанные в элементе управления WebBrowser, а затем сохранять их для сканирования или чего-либо еще, позже.

Переход по маршруту интерпретатора C # JavaScript звучит как «более правильный» способ сделать это, но я держу пари, что это будет намного сложнее и будет сопряжено с ошибками и ошибками, если у вас нет простейших случаев.

Удачи.

2 голосов
/ 17 сентября 2012

FWIW, элемент управления C # WebBrowser очень и очень медленный. Он также не поддерживает более двух одновременных запросов.

Использование SHDocVw быстрее, но также ограничено семафором.

Быстрее все еще используется MSHTML. Рабочий код здесь: https://svn.arachnode.net/svn/arachnodenet/trunk/Renderer/HtmlRenderer.cs Имя пользователя / пароль: общедоступный (не имеет ограничений на запросы / рендеринг, которые есть у двух других при завершении процесса ...)

Это безголовый, поэтому ни один из элементов управления не отображается. (Faster).

Спасибо, Mike

1 голос
/ 22 декабря 2010

Если вы используете элемент управления WebBrowser в приложении Windows Forms для открытия страницы, то вы сможете получить доступ к DOM через HtmlDocument . Это будет работать для ссылок HTML.

Что касается ссылок, которые генерируются с помощью Javascript, вы можете посмотреть на свойство ObjectForScripting , которое должно позволять вам взаимодействовать с HTML-страницей через Javascript. Остальное затем становится проблемой Javascript, но оно должно (в теории) быть решаемым. Я не пробовал это, поэтому я не могу сказать.

0 голосов
/ 27 ноября 2016

AbotX делает рендеринг JavaScript для вас. Это не бесплатно, хотя.

0 голосов
/ 22 декабря 2010

Если сайт генерирует контент с помощью JavaScript, то вам не повезло.Вам нужен полный механизм JavaScript, который можно использовать в C #, чтобы вы могли на самом деле выполнять сценарии и захватывать генерируемые ими выходные данные.

Взгляните на этот вопрос: Встраивание механизма JavaScript в .NET - но знайте, что потребуются «серьезные» усилия, чтобы сделать то, что вам нужно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...