Как определить, является ли твит оригинальным или ретвитующим при просмотре с помощью HtmlAgilityPack? - PullRequest
0 голосов
/ 11 июня 2018

Я хотел, чтобы твиты пользователей твиттера были проанализированы.Для этого я использовал пакет HtmlAgilityPack , чтобы очистить Twitter, и он дает мне 30 главных твитов.

Я распознал элемент твит-текста и получил все твиты.Но я хочу определить, твит это или ретвит.Как я могу это сделать?

Я проанализировал HTML.В ретвите будет элемент, имеющий класс tweet-context with-icn.Но когда я проверяю твит на этом классе, он выбрасывает нулевое исключение, потому что не у всех твитов будет этот класс.Затем, основываясь на том, что и как я могу просмотреть, чтобы узнать, ретвит это или нет?

Код:

HtmlAgilityPack.HtmlWeb web = new HtmlAgilityPack.HtmlWeb();
HtmlAgilityPack.HtmlDocument doc = web.Load("https://twitter.com/BarackObama");

var TweetsNode= doc.DocumentNode.SelectNodes("//tr[@class='tweet-container']").ToList();

foreach (var item in TweetsNode)
{
    var tweet = new Tweets
    {
        console.WriteLine(item.innertext);
    };
}

В приведенном выше коде я попытался получить твиты БаракаПрофиль Обамы.Я получаю лучшие 30 твитов.Как я могу узнать, какой из них ретвит?
Спасибо.

1 Ответ

0 голосов
/ 11 июня 2018

Скребущий Твиттер 101

  1. Получить все твиты со страницы (которая попадает в удобные таблицы <table class='tweet '>)

    HtmlWeb p = new HtmlWeb();
    var doc = p.Load(@"https://twitter.com/dailygametips");
    var nodes = doc.DocumentNode.SelectNodes("//table[@class='tweet  ']");
    
  2. Взглядв узлах для <span class='context'>, чтобы указать, что этот твит является ретвитом.

    List<Tweet> tweets = new List<Tweet>();
    foreach (var node in nodes)
    {
        bool isRetweet = false;
        var spanNode = node.SelectSingleNode(".//span[@class='context']");
        if (spanNode != null && spanNode.InnerHtml.Contains("retweeted"))
        {
            isRetweet = true;
        }
    
  3. Мы также хотим текст сообщения, поэтому удалите этот следующий <div class='tweet-text'>:

        string msg = string.Empty;
        var msgNode = node.SelectSingleNode(".//div[@class='tweet-text']");
        if (msgNode != null)
        {
            msg = msgNode.InnerText.Trim();
        }
        tweets.Add(new Tweet(msg, isRetweet));
    }
    

Дополнительно класс контейнеров чириканья:

class Tweet
{
    public Tweet(string message, bool isRetweet)
    {
        Message = message;
        IsRetweet = isRetweet;
    }

    string Message { get; private set; }
    bool IsRetweet { get; private set; }
}

Как вы говорите, это не совсем ракетостроение.Но вам нужно понять основные принципы XPath и Scrapping.

...