Bonjour, j’utilise le pack d’agilité html des paquets de pépites afin de gratter une page Web afin d’obtenir toutes les URL sur la page. Le code est indiqué ci-dessous. Cependant, la façon dont cela me revient dans la sortie, les liens ne sont que des extensions du site Web actuel, mais pas le lien URL complet comme http://www.foo/bar/foobar.com . Tout ce que j'aurai, c'est "/ foobar". Est-il possible d'obtenir les liens complets de l'URL avec le code ci-dessous? Merci!
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();
}
Vous pouvez vérifier la valeur HREF s'il s'agit d'une URL relative ou absolue. Chargez le lien dans un Uri et vérifiez s'il est relatif. Si c'est le cas, convertissez-le en absolu.
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();
}
Fonction pour convertir l'URL relative en absolu
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();
}