Для поиска строк в строке (поиск всех ссылок в источнике HTML) - PullRequest
1 голос
/ 17 июня 2011

У меня есть строковая переменная, которая содержит весь HTML-код веб-страницы. Веб-страница будет содержать ссылки на другие сайты. Я хотел бы создать список всех hrefs (как webcrawler). Каков наилучший способ сделать это? Поможет ли использование какой-либо функции расширения? как насчет использования Regex?

Заранее спасибо

Ответы [ 5 ]

3 голосов
/ 17 июня 2011

Используйте анализатор DOM, такой как HTML Agility Pack , чтобы проанализировать документ и найти все ссылки.

На SO есть хороший вопрос о том, как использовать HTML Agility Pack, доступный здесь .Вот простой пример для начала работы:

string html = "your HTML here";

HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();

doc.LoadHtml(html);

var links = doc.DocumentNodes.DescendantNodes()
   .Where(n => n.Name == "a" && n.Attributes.Contains("href")
   .Select(n => n.Attributes["href"].Value);
1 голос
/ 17 июня 2011

Вы изучали использование HTMLAGILITYPACK?http://htmlagilitypack.codeplex.com/

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

private List<string> ExtractAllAHrefTags(HtmlDocument htmlSnippet)
{
    List<string> hrefTags = new List<string>();

    foreach (HtmlNode link in htmlSnippet.DocumentNode.SelectNodes("//a[@href]"))
    {
        HtmlAttribute att = link.Attributes["href"];
        hrefTags.Add(att.Value);
    }

    return hrefTags;
}

Взято из другого поста здесь - Получить все ссылки на html-странице?

1 голос
/ 17 июня 2011

Попробуйте это регулярное выражение (должно работать):

var matches = Regex.Matches (html, @"href=""(.+?)""");

Вы можете пройти через совпадения и извлечь захваченный URL.

1 голос
/ 17 июня 2011

Я бы пошел с Regex.

        Regex exp = new Regex(
            @"{href=}*{>}",
            RegexOptions.IgnoreCase);
        string InputText; //supply with HTTP
        MatchCollection MatchList = exp.Matches(InputText);
1 голос
/ 17 июня 2011

Я думаю, вы найдете ответ на свой вопрос к T

http://msdn.microsoft.com/en-us/library/t9e807fx.aspx

:)

...