Анализ URL-адресов из HTML-страницы

У меня есть строка, содержащая HTML-страницу, загруженную через WinHttpReadData. Строка представляет собой простую char*.
Я пытался найти способ извлечь только те URL-адреса, которые находятся на этой странице. В качестве примера представьте, что вы ищете в Google слово WinHTTP, и вам предоставляется HTML-страница, полная ссылок. Теперь мне нужно проверить каждую ссылку, извлечь ее и сохранить в файл.

Я пробовал искать HREF, http:// и другие ключевые слова, а затем пытался извлечь строку полностью до </a>, но на самом деле это не работает. Было бы неплохо также получить описание этого URL-адреса (например, <a href="http://someurl.com/somepage.html">some text</a> получить some text), но это не так важно, как сам URL-адрес.

Сложность здесь в том, что я не могу использовать сторонние библиотеки, так как не хочу иметь дело с лицензиями и тому подобным.

Есть идеи, как это сделать? Предоставляет ли WinHTTP способ сделать это? в C (не C++)?

Спасибо за помощь


person Mr Aleph    schedule 01.03.2011    source источник
comment
так как я не хочу иметь дело с лицензиями и тому подобным - просто найдите анализатор HTML, который распространяется под лицензией LGPL. Затем вы можете в основном использовать его, не заботясь ни о чем, если вы не изменяете саму библиотеку.   -  person ThiefMaster    schedule 01.03.2011
comment
Уже пробовал, не смог найти ни BSD, ни MOZILLA, ни LGPL. Спасибо.   -  person Mr Aleph    schedule 01.03.2011


Ответы (1)


Возможно, вам следует использовать PCRE C API (доступен на сайте PCRE)

Регулярное выражение, которое вам понадобится, будет выглядеть так:

<a.*?href=[""'](?<url>.*?)[""'].*?>(?<name>.*?)</a>

Это также должно отображать группу <url> и <name> в структуре группы.

person M'vy    schedule 01.03.2011
comment
Я бы также использовал Regex. Если вы используете C++0X, он имеет встроенную поддержку в STL. - person RedX; 01.03.2011
comment
Спасибо за совет. Я только что скачал PCRE, но не могу понять, что использовать из всех файлов, которые находятся в пакете. Не могли бы вы указать на файлы, которые мне нужны? или они мне нужны все? - person Mr Aleph; 01.03.2011
comment
Не хочу показаться грубым, но README должен стать хорошим началом. Бьюсь об заклад, исходники компилируются с помощью make или cmake в библиотеку. Затем вам нужно импортировать заголовочный файл, который описывает внешний интерфейс библиотеки, и вы связываете его при сборке. Ищите также документацию на веб-сайте или в Google. Вы обязательно найдете примеры. Извините за уточнение, но в данный момент я не пользуюсь библиотекой. - person M'vy; 01.03.2011
comment
Спасибо. к сожалению, я не использую GCC или другие компиляторы, где я могу использовать make-файл, поставляемый с библиотекой. Я использую визуальную студию... Думаю, тогда я не буду использовать это. Еще раз спасибо - person Mr Aleph; 01.03.2011
comment
В этом случае проверьте также файл NON-UNIX-USE. Речь идет об использовании cmake для пользователей Windows. Они также говорят о Visual Studio в какой-то части. Кстати, добро пожаловать. - person M'vy; 01.03.2011