考虑这段代码:
<tr>
<td valign=top class="tim_new"><a href="/stocks/company_info/pricechart.php?sc_did=MI42" class="tim_new">3M India</a></td>
<td class="tim_new" valign=top><a href='/stocks/marketstats/indcomp.php?optex=NSE&indcode=Diversified' class=tim>Diversified</a></td>
我想使用HTMLAgility包编写一段代码,它会在第一行中提取链接。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using HtmlAgilityPack;
namespace WebScraper
{
class Program
{
static void Main(string[] args)
{
HtmlDocument doc = new HtmlDocument();
doc.LoadHtml("http://theurl.com");
try
{
var links = doc.DocumentNode.SelectNodes("//td[@class=\"tim_new\"]");
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
Console.WriteLine(ex.StackTrace);
Console.ReadKey();
}
}
}
}
当我尝试在try块中插入foreach(var link in links)
语句/循环时,会抛出运行时错误。
答案 0 :(得分:1)
代码doc.LoadHtml("http://theurl.com");
不起作用。 LoadHtml的参数应该是包含HTML的字符串,而不是URL。您必须先尝试获取HTML文档,然后再尝试解析它。
加载文档后,对于此特定示例,您可以使用:
IEnumerable<string> links = doc.DocumentNode
.SelectNodes("//a[@class='tim_new']")
.Select(n => n.Attributes["href"].Value);