我在以下网页上有这个URL列表,我想知道如何获取URL并将它们添加到ArrayList中?
http://www.manta.com/mb?search=U.S.+Cellular&refine_company_loctype=B
我尝试自己做,不管出于什么原因我没有得到任何结果 这是代码
using (var wc = new WebClient())
{
HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(wc.DownloadString("http://www.manta.com/mb?search=U.S.+Cellular&refine_company_loctype=B"));
var links = doc.DocumentNode.SelectSingleNode("//div[@class='clear']")
.Descendants("a")
.Select(x => x.Attributes["href"].Value)
.ToArray();
foreach(var item in links)
{
Response.Write(item.ToString()+"---new line---<br/>");
}
}
答案 0 :(得分:1)
首先,您尝试抓取的网站具有针对许多网站请求的验证码和/或超时保护。
所以你应该考虑到这一点。在这种情况下,您将成为不同的网页而没有您的div。
其次,您只通过SelectSingleNode从文档中选择一个节点,因此它只返回一个节点。
请尝试以下代码:
using (var wc = new WebClient())
{
HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(wc.DownloadString("http://www.manta.com/mb?search=U.S.+Cellular&refine_company_loctype=B"));
var divs = doc.DocumentNode.SelectNodes("//div[@class='clear']");
if (!divs.Any())
Response.Write("Not found or timeout protection mechanism");
foreach (var item in divs)
{
HtmlNode link = item.Descendants("a").FirstOrDefault();
Response.Write(link.GetAttributeValue("href", string.Empty));
}
}