2017-06-15 1 views
0

J'ai essayé de télécharger un profil Instagram public pour les statistiques de fetch telles que followers et bio. Je l'ai fait dans une application de console C# et de télécharger le HTML en utilisant HTML Agility Pack.C# Télécharger le profil Instagram en HTML

code:

string url = @"https://www.instagram.com/" + Console.ReadLine() + @"/?hl=en"; 
Console.WriteLine(); 

HtmlWeb web = new HtmlWeb(); 
HtmlDocument document = web.Load(url); 
document.Save(path1); 

Quand je l'enregistrer si tout ce que je reçois est un tas de scripts et un écran vide:

enter image description here

Je me demandais comment sauver le code html une fois tous les scripts se sont exécutés et ont formé le contenu

Répondre

0

RÉPONSE

Merci pour les suggestions sur la façon de télécharger le code HTML! J'ai réussi à retourner quelques informations instagram à la fin. Voici le code:

//(This was done using HTML Agility Pack) 

string url = @"https://www.instagram.com/" + Console.ReadLine() + @"/?hl=en"; 

HtmlWeb web = new HtmlWeb(); 
HtmlDocument document = web.Load(url); 

var metas = document.DocumentNode.Descendants("meta"); 
var followers = metas.FirstOrDefault(_ => _.HasProperty("name", "description")); 

if (followers == null) { Console.WriteLine("Sorry, Can't Find Profile :("); return; } 

var content = followers.Attributes["content"].Value.StopAt('-'); 

Console.WriteLine(content); 

Et hasProperty() & StopAt()

public static bool HasProperty(this HtmlNode node, string property, params string[] valueArray) 
{ 
    var propertyValue = node.GetAttributeValue(property, ""); 
    var propertyValues = propertyValue.Split(' '); 
    return valueArray.All(c => propertyValues.Contains(c)); 
} 

public static string StopAt(this string input, char stopAt) 
{ 
    int x = input.IndexOf(stopAt); 
    return input.Substring(0, x); 
} 

REMARQUE:

Toutefois, ce n'est pas encore la réponse que je cherche. J'ai toujours une épave de HTML qui n'est pas aussi structurée que le HTML que je reçois quand je le regarde dans Google Chrome. En effectuant des recherches dans le code HTML, j'ai réussi à redimensionner le code HTML sans contenu pour une balise META contenant le contenu. Cela est correct pour cela mais si je continue cette méthode de recherche de contenu HTML, alors il peut ne pas être le même :(

0

Lorsque vous récupérez du contenu à l'aide d'une requête Web, il renvoie un document HTML qui est ensuite rendu par le navigateur pour afficher le contenu.

En ce moment, vous enregistrez le document HTML qui vous est fourni par le serveur. Au lieu de faire cela, vous devez le rendre avant d'obtenir les détails. Une façon de faire est d'utiliser un contrôle de navigateur Web. Si vous définissez l'URL sur l'URL d'instragram, laissez le moteur de rendu la gérer et une fois que l'événement de chargement est déclenché par le contrôle, vous pouvez obtenir la sortie HTML rendue. À partir de là, vous pouvez désérialiser en tant que XmlDocument et identifier exactement les détails à extraire de la sortie rendue.

+0

J'ai essayé d'utiliser Windows Forms WebBrowser, puis en enregistrant le document en utilisant Stream Writer. La tête et le corps ne balises rien d'autre Je développe sur C# Console Application Le webBrowser fonctionne-t-il? Aussi j'ai dû changer le fil "parce que le fil courant n'est pas dans un appartement monotrou" –

1
public MainWindow() 
    { 
     InitializeComponent(); 
     WB_1.Navigate(@"https://www.instagram.com/" + Console.ReadLine() + @"/?hl=en"); 

     WB_1.LoadCompleted += wb_LoadCompleted; 
    } 

    void wb_LoadCompleted(object sender, NavigationEventArgs e) 
    { 
     dynamic doc = WB_1.Document; 
     string htmlText = doc.documentElement.InnerHtml; 
    } 
+0

Comment attendez-vous qu'il soit –

+0

@BenWebb Utiliser l'événement 'LoadCompleted' –

+0

J'ai votre code pour fonctionner, mais il n'y a pas de différence avec ma sortie d'origine en utilisant le pack d'agilité HTML –