在c#中获取Yahoo结果页面的标题和URL

时间:2016-06-23 15:22:05

标签: c# html css asp.net html-agility-pack

我想通过htmlagility pack获取Yahoo结果页面的标题和网址

<script type="application/ld+json">
  {
    "@context" : "http://schema.org",
    "@type" : "Organization",
    "name" : "Company Name",
    "url" : "https://www.company.com",
    "logo" : "https://www.company.com/images/logo.png"
  }
</script>

它有效,但搜索结果中的所有链接都不是适当的链接,如何省略广告链接,Yahoo链接等 我想访问正确的链接

1 个答案:

答案 0 :(得分:1)

这个怎么样:

HtmlWeb w = new HtmlWeb();

string search = "https://en-maktoob.search.yahoo.com/search?p=veverke";
//ac-algo ac-21th lh-15
var hd = w.Load(search);

var titles = hd.DocumentNode.CssSelect(".title a").Select(n => n.InnerText);
var links = hd.DocumentNode.CssSelect(".fz-15px.fw-m.fc-12th.wr-bw.lh-15").Select(n => n.InnerText);

for (int i = 0; i < titles.Count() - 1; i++)
{
    var title = titles.ElementAt(i);
    string link = string.Empty;
    if (links.Count() > i)
        link = links.ElementAt(i);

    Console.WriteLine("Title: {0}, Link: {1}", title, link);
}

请注意,我正在使用来自nuget package的CssSelect的扩展方法ScrapySharp。像安装HtmlAgilityPack一样安装它,然后在代码顶部添加一个using语句,如using ScrapySharp.Extensions;,你就可以了。 (我使用它是因为它更容易引用css选择器而不是xpath表达式...)

关于跳过广告,我发现这些雅虎搜索结果中的广告只会出现在最后一条记录中?假设我是正确的,只需跳过最后一个。

以下是运行上述代码所得到的输出:

enter image description here