gpt4 book ai didi

c# - html agility pack url scraping——获取完整的html链接

转载 作者:行者123 更新时间:2023-11-30 23:31:25 25 4
gpt4 key购买 nike

嗨,我正在使用 nuget 包中的 html 敏捷包来抓取网页以获取页面上的所有 url。代码如下所示。然而,它在输出中返回给我的方式是,链接只是实际网站的扩展,而不是像 http://www.foo/bar/foobar.com 这样的完整 url 链接。 。我将得到的只是“/foobar”。有没有办法使用下面的代码获取 url 的完整链接?谢谢!

static void Main(string[] args)
{
List<string> linksToVisit = ParseLinks("https://www.facebook.com");
}

public static List<string> ParseLinks(string email)
{

WebClient webClient = new WebClient();

byte[] data = webClient.DownloadData(email);
string download = Encoding.ASCII.GetString(data);

HashSet<string> list = new HashSet<string>();

var doc = new HtmlDocument();
doc.LoadHtml(download);
HtmlNodeCollection nodes = doc.DocumentNode.SelectNodes("//a[@href]");

foreach (var n in nodes)
{
string href = n.Attributes["href"].Value;
list.Add(href);
}
return list.ToList();
}

最佳答案

您可以检查 HREF 值是相对 URL 还是绝对 URL。将链接加载到 Uri并测试它是否是相对的如果是相对的,则将其转换为绝对的将是要走的路。

static void Main(string[] args)
{
List<string> linksToVisit = ParseLinks("https://www.facebook.com");
}

public static List<string> ParseLinks(string urlToCrawl)
{

WebClient webClient = new WebClient();

byte[] data = webClient.DownloadData(urlToCrawl);
string download = Encoding.ASCII.GetString(data);

HashSet<string> list = new HashSet<string>();

var doc = new HtmlDocument();
doc.LoadHtml(download);
HtmlNodeCollection nodes = doc.DocumentNode.SelectNodes("//a[@href]");

foreach (var n in nodes)
{
string href = n.Attributes["href"].Value;
list.Add(GetAbsoluteUrlString(urlToCrawl, href));
}
return list.ToList();
}

将相对URL转换为绝对URL的函数

static string GetAbsoluteUrlString(string baseUrl, string url)
{
var uri = new Uri(url, UriKind.RelativeOrAbsolute);
if (!uri.IsAbsoluteUri)
uri = new Uri(new Uri(baseUrl), uri);
return uri.ToString();
}

关于c# - html agility pack url scraping——获取完整的html链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34582769/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com