如何使用HtmlAgilityPack識別推文是原創的還是轉推的?

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

我想要用戶的Twitter推文進行數據分析。為此,我使用了HtmlAgilityPack軟件包來抓取Twitter,它給了我30條熱門推文。

我認識了tweet-text元素並獲取了所有推文。但我想確定它是推文還是推特。我怎樣才能做到這一點?

我分析了HTML。在轉發中,將有一個帶有tweet-context with-icn類的元素。但是當我在該類上抓取推文時,它會拋出null異常,因為並非所有的推文都會有該類。然後根據我是什麼以及如何刮去了解它是否轉推?

碼:

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

在上面的代碼中,我試圖獲取Barack Obama簡介的推文。我收到前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'>以指示此推文是轉發。

    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的基本原理。




許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因