Question

Je tente d'utiliser le HTML Agility pack pour rechercher des mots-clés spécifiques sur Google, puis vérifier à travers les nœuds liés jusqu'à trouver mon string url de sites, analyser ensuite le innerHTML du nœud que je suis sur mon classement Google.

Je suis relativement nouveau à l'agilité pack (comme, je commencé à regarder vraiment à travers hier) donc j'espérais que je pourrais obtenir de l'aide à ce sujet. Quand je fais la recherche ci-dessous, je reçois des échecs sur mes requêtes XPath à chaque fois. Même si je insérer quelque chose d'aussi simple que SelectNodes ( "// * [@ id = 'RSO']"). Est-ce quelque chose que je fais mal?

    private void GoogleScrape(string url)
    {
        string[] keys = keywordBox.Text.Split(',');
        for (int i = 0; i < keys.Count(); i++)
        {
            var raw = "http://www.google.com/search?num=100&q=";
            string search = raw + HttpUtility.UrlEncode(keys[i]);
            var webGet = new HtmlWeb();
            var document = webGet.Load(search);
            loadtimeBox.Text = webGet.RequestDuration.ToString();

            var ranking = document.DocumentNode.SelectNodes("//*[@id='rso']");

            if (ranking != null)
            {
                googleBox.Text = "Something";
            }
            else
            {
                googleBox.Text = "Fail";
            }
           }
          }
Était-ce utile?

La solution

Ce n'est pas la culpabilité du paquet Agilité - il est difficile de Google. Si vous inspectez _TEXT propriété de HtmlDocument avec le débogueur, vous constaterez que <ol> qui a id='rso' lors de l'inspection dans un navigateur ne possède pas d'attributs pour une raison quelconque.

Je pense que, dans ce cas, vous pouvez simplement Serach « // ol », parce qu'il n'y a qu'une seule étiquette <ol> dans la page des résultats de Google au moment ...

Mise à jour: Je l'ai fait d'autres vérifications. Par exemple, quand je fais ceci:

using (StreamReader sr = 
        new StreamReader(HttpWebRequest
          .Create("http://www.google.com/search?num=100&q=test")
          .GetResponse()
          .GetResponseStream()))
{
    string s = sr.ReadToEnd();
    var m2 = Regex.Matches(s, "\\sid=('[^']+'|\"[^\"]+\")");
    foreach (var x in m2)
        Console.WriteLine(x);
}

Les seuls ids qui sont renvoyés sont:. "Sflas", "hidden_modes" et "tbpr_12"

Pour conclure: Je l'ai utilisé Html Agility Pack et il est assez bien fait face même avec malformé html (et même <p> unclosed <li> étiquettes etc.)

.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top