如何使用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'>以指示此推文是转发。

    HtmlWeb p = new HtmlWeb();
    var doc = p.Load(@"https://twitter.com/dailygametips");
    var nodes = doc.DocumentNode.SelectNodes("//table[@class='tweet  ']");
    
  3. 我们还想要消息文本,因此请将其删除<div class='tweet-text'>

    HtmlWeb p = new HtmlWeb();
    var doc = p.Load(@"https://twitter.com/dailygametips");
    var nodes = doc.DocumentNode.SelectNodes("//table[@class='tweet  ']");
    

附加Tweet容器类:

HtmlWeb p = new HtmlWeb();
var doc = p.Load(@"https://twitter.com/dailygametips");
var nodes = doc.DocumentNode.SelectNodes("//table[@class='tweet  ']");

如你所知,这不是真正的火箭科学。但是您需要了解XPath和Scrapping的基本原理。




许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因
许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因