Utilisez HTML Agility Pack pour extraire du contenu dynamique

c# html-agility-pack

Question

Disons que j'ai une liste de 10 sources d'informations que j'aime importer dans ma base de données locale. Je dois ouvrir chacune de ces pages de nouvelles externes, en extraire le contenu principal et le sauvegarder. La structure html de toutes ces pages est différente. Certains utilisent div, tandis que d'autres utilisent des balises d'article.

Je sais que je peux utiliser l'objet HttpWebRequest pour ouvrir la page et utiliser HtmlAgilityPack pour charger le document [HTML].

HttpWebRequest oReq = (HttpWebRequest)WebRequest.Create(url);
HttpWebResponse resp = (HttpWebResponse)oReq.GetResponse();
var doc = new HtmlAgilityPack.HtmlDocument();
doc.Load(resp.GetResponseStream());

Cependant, je ne sais pas comment je pourrais cibler l'élément principal sans connaître le type.

Est-ce que j'essaye de faire même possible?

Réponse populaire

HTML Agility Pack est extrêmement utile, mais le code qui l’utilise doit généralement être adapté à la structure du site.

Vous pouvez essayer d'être générique et adaptatif, mais même les "Big Boys" comme Evernote doivent avoir différentes options de découpage pour différentes dispositions de site.

La première chose que je regarderais: si c'est des nouvelles, devriez-vous utiliser leurs flux RSS à la place? (Pas seulement techniquement, mais légalement. Consultez les sections conditions de service des sites.)

Si vous devez analyser leur site, je vous suggère de créer une interface et une classe distincte pour chaque site qui implémente l'interface. Tweak chaque classe pour correspondre à la structure du site respectif.




Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi