Как определить, является ли твит оригинальным или перефразировать в соскабливании с помощью HtmlAgilityPack?

c# filter html-agility-pack tweetr web-scraping

Вопрос

Мне нужны твиты Twitter для пользователя для анализа данных. Для этого я использовал пакет HtmlAgilityPack для очистки Twitter, и он дает мне 30 лучших твитов.

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

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

Код:

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 лучших твитов. Как я могу узнать, какой из них переплетается?
Спасибо.

Принятый ответ

Скребок Twitter 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'> чтобы указать, что этот твит является retweet.

    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));
    }
    

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

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

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

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



Related

Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow