2015-11-09 4 views
1

У меня есть приложение C# Windows Phone 8.1, которое я создаю. Часть приложения должна идти и искать информацию на определенной веб-странице. Одно из полей, которые мне нужно это URL, который можно найти на некоторых элементов на странице, но я нахожу, что URL в формате относительного стиляC# web scraper перейти к aspx link

FullArticle.aspx?a=323495 

Я интересно, если есть способ в C#, используя HtmlAgilityPack, HttpWebRequest и т. д., чтобы найти ссылку на фактическую страницу. Ниже приведен фрагмент кода.

private static TileUpdate processSingleNewsItem(HtmlNode newsItemNode) 
{ 
    Debug.WriteLine(""); 
    var articleImage = getArticleImage(getNode(newsItemNode, "div", "nw-container-panel-articleimage")); 
    var articleDate = getArticleDate(getNode(newsItemNode, "div", "nw-container-panel-articledate")); 
    var articleSummary = getArticleSummary(getNode(newsItemNode, "div", "nw-container-panel-textarea")); 
    var articleUrl = getArticleUrl(getNode(newsItemNode, "div", "nw-container-panel-articleimage")); 
    return new TileUpdate{ 
     Date = articleDate, 
     Headline = articleSummary, 
     ImagePath = articleImage, 
     Url = articleUrl 
    }; 
} 

private static string getArticleUrl(HtmlNode parentNode) 
{ 
    var imageNode = parentNode.Descendants("a").FirstOrDefault(); 
    Debug.WriteLine(imageNode.GetAttributeValue("href", null)); 
    return imageNode.GetAttributeValue("href", null); 
} 

private static HtmlNode getNode(HtmlNode parentNode, string nodeType, string className) 
{ 
    var children = parentNode.Elements(nodeType).Where(o => o.Attributes["class"].Value == className); 
    return children.First(); 
} 

Поблагодарили бы за любые идеи или решения. Ура!

+0

Если ссылки находятся в относительном формате, вы не можете просто добавить текущий URL в качестве префикса, чтобы получить полный URL? Может быть, перейдите в 'Reqest.AbsoluteUri' в' processSingleNewsItem'? – Pogrindis

ответ

0

В моей web crawler Вот что я делаю:

foreach (HtmlNode link in doc.DocumentNode.SelectNodes(@"//a[@href]")) 
{ 
    HtmlAttribute att = link.Attributes["href"]; 
    if (att == null) continue; 
    string href = att.Value; 
    if (href.StartsWith("javascript", StringComparison.InvariantCultureIgnoreCase)) continue;  // ignore javascript on buttons using a tags 

    Uri urlNext = new Uri(href, UriKind.RelativeOrAbsolute); 

    // Make it absolute if it's relative 
    if (!urlNext.IsAbsoluteUri) 
    { 
     urlNext = new Uri(urlRoot, urlNext); 
    } 
    ... 
} 
+0

Спасибо, это решило мою проблему. Я не думал смотреть и видеть, если строка содержалась в любом месте Url глупо, поэтому ваш ответ заставил меня проверить его, и я нашел строку (и остальную часть Url, которую я установил urlRoot в вашем примере). –

Смежные вопросы