1
votes

Extraire des informations d'un autre site

Je souhaite extraire le nombre d'abonnés de https://www.instagram.com/bbcpersian/ et utilisez les codes suivants pour ce faire, mais cela ne fonctionne pas correctement.

var html = @"https://www.instagram.com/bbcpersian/";
HtmlWeb web = new HtmlWeb();
var htmlDoc = web.Load(html);
var htmlNodes = htmlDoc.DocumentNode.SelectNodes("/html/body/div[1]/section/main/div/header/section/ul/li[2]/a/span");
foreach (var node in htmlNodes)
{
    Console.WriteLine(node.InnerHtml + "  -  " + node.Attributes["title"].Value);
}

Erreur entrez la description de l'image ici

OR

var url = "https://www.instagram.com/bbcpersian/";
var web = new HtmlWeb();
var htmlDoc = web.Load(url);
var node = htmlDoc.DocumentNode.SelectSingleNode("/html/body/div[1]/section/main/div/header/section/ul/li[2]/a/span");
string result = node.WriteContentTo();
Console.WriteLine(result);

Erreur entrez la description de l'image ici


4 commentaires

Que signifie «ne fonctionne pas correctement»?


"ne fonctionne pas correctement" = Erreur !!!


... et quelle erreur cela pourrait-il être alors? Veuillez réaliser que nous ne pouvons pas simplement deviner. Vous savez donc s'il vous plaît dites-nous.


pouvez-vous essayer li [1] comme ci-dessous / html / body / div [1] / section / main / div / header / section / ul / li [1] / a‌ / span


4 Réponses :


0
votes

Vous pouvez utiliser des expressions régulières à la recherche de l'étendue où se trouvent les abonnés.

/<a class="-nal3 " href="\/[a-zA-Z0-9]+\/followers\/"><span class="g47SY " title="([0-9.]+)">6,3mm<\/span>/m


0 commentaires

0
votes

J'ai utilisé Selenium pour encombrer un site et extraire des images comme ci-dessous, cela peut être utile pour vous:

IWebDriver _webDriver = null;
 var firefoxOptions = new FirefoxOptions
                            {
                                LogLevel = FirefoxDriverLogLevel.Debug,
                                BrowserExecutableLocation = Configuration.Developer.SeleniumBrowserExecutableLocation
                            };

                            firefoxOptions.AddArguments("no-sandbox");
                            firefoxOptions.AddArguments("-headless");

                            _webDriver = new RemoteWebDriver(new Uri($"{Configuration.Developer.SeleniumRemoteUrl}"), firefoxOptions);
  _webDriver.Manage().Window.Maximize();
                        _webDriver.Manage().Cookies.DeleteAllCookies();
                        _webDriver.Url = $"https://www.YourSite.com/";
                        _webDriver.Navigate();
                        var wait = new WebDriverWait(_webDriver, new TimeSpan(0, 0, 30));
 var element = wait.Until(SeleniumExtras.WaitHelpers.ExpectedConditions.ElementIsVisible(By.ClassName("jumbo-hero")));
                        var imageContent = element.GetAttribute("innerHTML");
                        _webDriver.Quit();
   var fromSrc = doc.DocumentNode.Descendants("img").Where(e => e.Attributes.Contains("src") && string.IsNullOrWhiteSpace(e.Attributes["src"].Value) == false).Select(e => e.Attributes["src"].Value).ToList();
                        var fromDataSrc = doc.DocumentNode.Descendants("img").Where(e => e.Attributes.Contains("data-src") && string.IsNullOrWhiteSpace(e.Attributes["data-src"].Value) == false).Select(e => e.Attributes["data-src"].Value).ToList();


0 commentaires

1
votes

Avez-vous vérifié la structure HTML dans voir la source ?

votre HTML actuel dans le fichier / html / body / div 1 a> est comme ci-dessous. Le contenu que vous voyez dans la page est chargé dynamiquement. Par conséquent, ces structures ne sont pas disponibles dans le document html que vous créez. Vous devez envisager une autre option pour ce faire.

<div id="react-root">

    <span><svg width="50" height="50" viewBox="0 0 50 50" style="position:absolute;top:50%;left:50%;margin:-25px 0 0 -25px;fill:#c7c7c7"><path d="M25 1c-6.52 0-7.34.03-9.9.14-2.55.12-4.3.53-5.82 1.12a11.76 11.76 0 0 0-4.25 2.77 11.76 11.76 0 0 0-2.77 4.25c-.6 1.52-1 3.27-1.12 5.82C1.03 17.66 1 18.48 1 25c0 6.5.03 7.33.14 9.88.12 2.56.53 4.3 1.12 5.83a11.76 11.76 0 0 0 2.77 4.25 11.76 11.76 0 0 0 4.25 2.77c1.52.59 3.27 1 5.82 1.11 2.56.12 3.38.14 9.9.14 6.5 0 7.33-.02 9.88-.14 2.56-.12 4.3-.52 5.83-1.11a11.76 11.76 0 0 0 4.25-2.77 11.76 11.76 0 0 0 2.77-4.25c.59-1.53 1-3.27 1.11-5.83.12-2.55.14-3.37.14-9.89 0-6.51-.02-7.33-.14-9.89-.12-2.55-.52-4.3-1.11-5.82a11.76 11.76 0 0 0-2.77-4.25 11.76 11.76 0 0 0-4.25-2.77c-1.53-.6-3.27-1-5.83-1.12A170.2 170.2 0 0 0 25 1zm0 4.32c6.4 0 7.16.03 9.69.14 2.34.11 3.6.5 4.45.83 1.12.43 1.92.95 2.76 1.8a7.43 7.43 0 0 1 1.8 2.75c.32.85.72 2.12.82 4.46.12 2.53.14 3.29.14 9.7 0 6.4-.02 7.16-.14 9.69-.1 2.34-.5 3.6-.82 4.45a7.43 7.43 0 0 1-1.8 2.76 7.43 7.43 0 0 1-2.76 1.8c-.84.32-2.11.72-4.45.82-2.53.12-3.3.14-9.7.14-6.4 0-7.16-.02-9.7-.14-2.33-.1-3.6-.5-4.45-.82a7.43 7.43 0 0 1-2.76-1.8 7.43 7.43 0 0 1-1.8-2.76c-.32-.84-.71-2.11-.82-4.45a166.5 166.5 0 0 1-.14-9.7c0-6.4.03-7.16.14-9.7.11-2.33.5-3.6.83-4.45a7.43 7.43 0 0 1 1.8-2.76 7.43 7.43 0 0 1 2.75-1.8c.85-.32 2.12-.71 4.46-.82 2.53-.11 3.29-.14 9.7-.14zm0 7.35a12.32 12.32 0 1 0 0 24.64 12.32 12.32 0 0 0 0-24.64zM25 33a8 8 0 1 1 0-16 8 8 0 0 1 0 16zm15.68-20.8a2.88 2.88 0 1 0-5.76 0 2.88 2.88 0 0 0 5.76 0z"/></svg></span>

</div>


0 commentaires

0
votes

Les pages Instagram sont compliquées. Votre xpath "/ html / body / div [1] / section / main / div / header / section / ul / li [2] / a / span" ne fonctionne pas car cette partie du DOM n'existe pas encore; dans un navigateur Web, la plupart du DOM d'une page Instagram est constitué d'une tonne de JavaScript.

Notez cependant que vous l'avez dans la page Web téléchargée:

var url = "https://www.instagram.com/bbcpersian/";
var web = new HtmlWeb();
var htmlDoc = web.Load(url);
string rawHTML = htmlDoc.Text;
Match m = Regex.Match(rawHTML, "\"(?<followers>.+?) Followers, (?<following>.+?) Following, (?<posts>.+?) Posts");
string result = m.Groups["followers"].Value;


4 commentaires

Qu'est-ce que rawHTML?


Le HTML brut de la page Instagram.


Comment y accéder ou comment le créer?


Que faire si nous voulons suivre la page?