Ici, j'essaie de lire les urls et de récupérer les images dans une page. Je dois exclure la page s'il s'agit du 404 et cesser de récupérer les images d'une page d'erreur 404. Comment faire en utilisant HtmlAgilityPack? Voici mon code
var document = new HtmlWeb().Load(completeurl);
var urls = document.DocumentNode.Descendants("img")
.Select(e => e.GetAttributeValue("src", null))
.Where(s => !String.IsNullOrEmpty(s)).ToList();
Vous devez enregistrer un événement PostRequestHandler
sur l'instance HtmlWeb
. Il sera généré après chaque document téléchargé et vous aurez accès à l'objet HttpWebResponse
. Il a une propriété pour le StatusCode
.
HtmlWeb web = new HtmlWeb();
HttpStatusCode statusCode = HttpStatusCode.OK;
web.PostRequestHandler += (request, response) =>
{
if (response != null)
{
statusCode = response.StatusCode;
}
}
var doc = web.Load(completeUrl)
if (statusCode == HttpStatusCode.OK)
{
// received a read document
}
En regardant le code du HtmlAgilityPack sur GutHub, c'est encore plus simple, HtmlWeb
a une propriété StatusCode
qui est définie avec la valeur:
var web = new HtmlWeb();
var document = web.Load(completeurl);
if (web.StatusCode == HttpStatusCode.OK)
{
var urls = document.DocumentNode.Descendants("img")
.Select(e => e.GetAttributeValue("src", null))
.Where(s => !String.IsNullOrEmpty(s)).ToList();
}
Une mise à jour de l'API AgilityPack a été mise à jour. Le truc reste le même:
var htmlWeb = new HtmlWeb();
var lastStatusCode = HttpStatusCode.OK;
htmlWeb.PostResponse = (request, response) =>
{
if (response != null)
{
lastStatusCode = response.StatusCode;
}
};
Soyez conscient de la version que vous utilisez!
J'utilise HtmlAgilityPack v1.5.1
et il n'y a pas d'événement PostRequestHandler
.
Dans la v1.5.1
il faut utiliser le champ PostResponse
. Voir exemple ci-dessous.
var htmlWeb = new HtmlWeb();
var lastStatusCode = HttpStatusCode.OK;
htmlWeb.PostResponse = (request, response) =>
{
if (response != null)
{
lastStatusCode = response.StatusCode;
}
};
Il n'y a pas beaucoup de différences mais elles le sont toujours.
J'espère que cela fera gagner du temps à quelqu'un.