Je veux utiliser ce code mais il retourne NULL dans tous ces paramètres! voudriez-vous s'il vous plaît aider comment le réparer ou quel est le problème?
Cliquez ici pour une image montrant ce qui s'est passé.
code:
HtmlWeb hw = new HtmlWeb();
private void button1_Click(object sender, EventArgs e)
{
Crawler("http://www.avval.ir/directory", 0);
}
public void Crawler(string url, int pid)
{
try
{
HtmlAgilityPack.HtmlDocument doc = hw.Load("http://www.avval.ir/directory");
HtmlNodeCollection nodes = doc.DocumentNode.SelectNodes("//a[@class='metatag-topi metatag-keywords']");
HtmlNodeCollection nodes2 = doc.DocumentNode.SelectNodes("//div[@class='pagination']/a[@href]");
HtmlNodeCollection phone = doc.DocumentNode.SelectNodes("//p[@class='phone fRight ml10']");
}
}
Mec, il semble que vous ayez une faute de frappe dans votre sélecteur xpath, voir:
HtmlNodeCollection nodes =
doc.DocumentNode.SelectNodes("//a[@class='metatag-topi metatag-keywords']");
Vous utilisez ici //a[@class='metatag-topi metatag-keywords']
expression //a[@class='metatag-topi metatag-keywords']
qui sélectionne toutes les balises <a>
avec la valeur d'attribut de class
metatag-topi metatag-keywords
. Mais le problème, c'est que la page que vous essayez d'appliquer votre expression ne contient pas de tels éléments, mais contient des <a class="metatag-topic metatag-keywords">
(lettre c
manquante à la fin du topic
) .
Il suffit de changer cette ligne pour:
HtmlNodeCollection nodes =
doc.DocumentNode.SelectNodes("//a[@class='metatag-topic metatag-keywords']");
et ça devrait marcher.
DocumentNode.SelectNodes
peut renvoyer null si aucun nœud n'est introuvable.
Vous pouvez cocher cette case. Pourquoi DocumentNode.SelectNodes renvoie null