Извлечение значений HREF из строки HTML - PullRequest
0 голосов
/ 16 января 2019

Я пытаюсь создать сканер, который возвращает только ссылки с веб-сайта, и он у меня доходит до того, что он возвращает скрипт HTML. Теперь я хочу использовать оператор if, чтобы проверить, что строка возвращена, и если она возвращается, она ищет все теги «» и показывает мне ссылку href. но я не знаю, какой объект проверять или какое значение я должен проверять.

Вот что у меня есть:

namespace crawler
{
    class Program
    {
        static void Main(string[] args)
        {
            System.Net.WebClient wc = new System.Net.WebClient();
            string WebData wc.DownloadString("https://www.abc.net.au/news/science/");
            Console.WriteLine(WebData);
            // if 
        }
    }        
}

Ответы [ 2 ]

0 голосов
/ 16 января 2019

Вы можете взглянуть на Ловкость HTML Пакет:

Тогда вы можете найти все ссылки с веб-страницы, такие как:

 var hrefs = new List<string>();
 var hw = new HtmlWeb();
 HtmlDocument document = hw.Load(/* your url here */);
 foreach(HtmlNode link in document.DocumentNode.SelectNodes("//a[@href]"))
 {
    HtmlAttribute attribute = link.Attributes["href"];

    if (!string.IsNullOrWhiteSpace(attribute.Value))
        hrefs.Add(attribute.Value);
 }
0 голосов
/ 16 января 2019

Во-первых, вы можете создать функцию для возврата всего HTML-кода веб-сайта, как вы это сделали. Вот тот, который у меня есть!

public string GetPageContents()
{
    string link = "https://www.abc.net.au/news/science/"
    string pageContent = "";
    WebClient web = new WebClient();
    Stream stream;

    stream = web.OpenRead(link);
    using (StreamReader reader = new StreamReader(stream))
    {
        pageContent = reader.ReadToEnd();
    }
    stream.Close();

    return pageContents;
}

Тогда вы могли бы создать функцию, которая возвращала бы подстроку или список подстрок (то есть, если бы вы хотели все теги , вы, вероятно, получили бы более одного).

List<string> divTags = GetBetweenTags(pageContents, "<div>", "</div>")

Это даст вам список, где вы можете, например, выполнить другой поиск тегов внутри каждого из этих тегов

public List<string> GetBetweenTags(string pageContents, string startTag, string endTag)
{
    Regex rx = new Regex(startTag + "(.*?)" + endTag);
    MatchCollection col = rx.Matches(value);

    List<string> tags = new List<string>();

    foreach(Match s in col)
        tags.Add(s.ToString());

    return tags;
}

Редактировать: Ничего себе не знал о Agility Pack HTML, спасибо @Gauravsa, я обновлю свой проект, чтобы использовать его!

...