【问题标题】:How to identify if tweet is original or retweet in scraping with HtmlAgilityPack?如何在使用 HtmlAgilityPack 抓取时识别推文是原创还是转推?
【发布时间】:2018-11-20 18:07:38
【问题描述】:

我想要用户的 Twitter 推文用于数据分析。为此,我使用了HtmlAgilityPack 包来抓取 Twitter,它给了我 30 条热门推文。

我识别了 tweet-text 元素并获取了所有推文。但我想确定它是推文还是转推。我该怎么做?

我已经分析了 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);
    };
}

在上面的代码中,我尝试获取有关 Barack Obama 个人资料的推文。我收到了前 30 条推文。我如何识别哪个是转发的?
谢谢。

【问题讨论】:

  • 看来你已经用你自己的第 3 段回答了第 2 段中的问题。你能具体说明你的问题是什么吗?
  • 你想要什么结果?一个包含 30 个推文的列表对象,每个推文都有一个标志 IsRetweet ? ????
  • 这是一个“无代码”问题。告诉我们您到目前为止尝试了什么以及您遇到的问题。您已经表明您通常可以抓取推文,因此您只需要找到使转推独特的东西(例如js-retweet-text)类。坦率地说,你应该展示你已经尝试过的代码。
  • 包含代码几乎总能让您更清楚您要完成的工作,甚至可能让我们(哦,我不知道)自己尝试并帮助找到解决方案。跨度>
  • @Neelam 相当于你的“项目”。

标签: c# filter web-scraping html-agility-pack tweetr


【解决方案1】:

抓取 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. 我们还想要消息文本,所以接下来就废弃这个&lt;div class='tweet-text'&gt;

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

【讨论】:

  • 哦...伙计..非常感谢您。我在做的是错误的 html 遍历我认为.. 感谢您的具体和明确的回答。虽然我的问题很混乱.. :) 我欠你..
  • @Smarties 你能建议我任何好的链接来更好地理解 Xpath 和报废。我还需要刮一些其他文件。所以我想自己尝试一下。
  • 还有另一个问题,我在 this.so 中没有得到完全解析的 html。所以我可以在 html 源代码中看到的一些元素在使用 HTMLAligibillity 包的解析代码中找不到。在我们的例子中,“doc”我应该怎么做?
  • @NeelamPrajapati 向您发送一个回购链接 fia Twitter
猜你喜欢
  • 2014-11-28
  • 1970-01-01
  • 1970-01-01
  • 2021-11-13
  • 2013-02-22
  • 2021-06-04
  • 1970-01-01
  • 1970-01-01
  • 2012-08-04
相关资源
最近更新 更多