我在以下网页上有这个 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/>");
}
}
最佳答案
首先,您尝试抓取的网站具有针对许多网站请求的验证码和/或超时保护。
所以你应该考虑到这一点。在这种情况下,您将变成没有 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));
}
}
关于c# - html敏捷得不到结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12129251/