如何在使用 HtmlAgilityPack 抓取时识别推文是原创推文还是转推文?
How to identify if tweet is original or retweet in scraping with HtmlAgilityPack?
我想要用户的 Twitter 推文进行数据分析。为此,我使用 HtmlAgilityPack 包来抓取 Twitter,它给了我 30 个热门推文。
我识别出推文文本元素并获取了所有推文。但我想确定它是推文还是转推。我该怎么做?
我分析过HTML。在转发中将有一个元素具有 tweet-context with-icn
class。但是当我在 class 上抓取推文时,它会抛出 null 异常,因为并非所有推文都会有 class。然后根据什么以及如何去了解它是否被转发?
代码:
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
从一个页面获取所有推文(在方便的表格中 <table class='tweet '>
)
HtmlWeb p = new HtmlWeb();
var doc = p.Load(@"https://twitter.com/dailygametips");
var nodes = doc.DocumentNode.SelectNodes("//table[@class='tweet ']");
在节点中查找 <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;
}
我们还需要消息正文,所以接下来将其废弃 <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:
class Tweet
{
public Tweet(string message, bool isRetweet)
{
Message = message;
IsRetweet = isRetweet;
}
string Message { get; private set; }
bool IsRetweet { get; private set; }
}
如您所说,这并不是真正的火箭科学。但是您需要了解 XPath 和 Scrapping 的基本原理。
我想要用户的 Twitter 推文进行数据分析。为此,我使用 HtmlAgilityPack 包来抓取 Twitter,它给了我 30 个热门推文。
我识别出推文文本元素并获取了所有推文。但我想确定它是推文还是转推。我该怎么做?
我分析过HTML。在转发中将有一个元素具有 tweet-context with-icn
class。但是当我在 class 上抓取推文时,它会抛出 null 异常,因为并非所有推文都会有 class。然后根据什么以及如何去了解它是否被转发?
代码:
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
从一个页面获取所有推文(在方便的表格中
<table class='tweet '>
)HtmlWeb p = new HtmlWeb(); var doc = p.Load(@"https://twitter.com/dailygametips"); var nodes = doc.DocumentNode.SelectNodes("//table[@class='tweet ']");
在节点中查找
<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; }
我们还需要消息正文,所以接下来将其废弃
<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:
class Tweet
{
public Tweet(string message, bool isRetweet)
{
Message = message;
IsRetweet = isRetweet;
}
string Message { get; private set; }
bool IsRetweet { get; private set; }
}
如您所说,这并不是真正的火箭科学。但是您需要了解 XPath 和 Scrapping 的基本原理。