我一直在尝试将公开的Instagram个人资料下载到fetch统计数据,例如关注者和生物。我一直在c#控制台应用程序中执行此操作,并使用HTML Agility Pack下载HTML。
代码:
string url = @"https://www.instagram.com/" + Console.ReadLine() + @"/?hl=en";
Console.WriteLine();
HtmlWeb web = new HtmlWeb();
HtmlDocument document = web.Load(url);
document.Save(path1);
当我保存它时,我得到的只是一堆脚本和一个空白屏幕:
我想知道如何在所有脚本运行并保存html后形成内容
答案 0 :(得分:1)
public MainWindow()
{
InitializeComponent();
WB_1.Navigate(@"https://www.instagram.com/" + Console.ReadLine() + @"/?hl=en");
WB_1.LoadCompleted += wb_LoadCompleted;
}
void wb_LoadCompleted(object sender, NavigationEventArgs e)
{
dynamic doc = WB_1.Document;
string htmlText = doc.documentElement.InnerHtml;
}
答案 1 :(得分:0)
当您使用Web请求检索内容时,它会返回一个HTML文档,然后由浏览器呈现该文档以显示内容。
目前,您正在保存服务器提供给您的HTML文档。而不是这样做,你需要在获取细节之前渲染它。一种方法是使用Web浏览器控件。如果您将URL设置为instragram URL,请让渲染引擎处理它,一旦控件触发了load事件,您就可以获得呈现的HTML输出。
从那里,您可以反序列化为XmlDocument,并确切地确定需要从渲染输出中检索哪些细节。
答案 2 :(得分:0)
感谢您提供有关如何下载HTML的建议!我最终设法返回了一些Instagram信息。这是代码:
//(This was done using HTML Agility Pack)
string url = @"https://www.instagram.com/" + Console.ReadLine() + @"/?hl=en";
HtmlWeb web = new HtmlWeb();
HtmlDocument document = web.Load(url);
var metas = document.DocumentNode.Descendants("meta");
var followers = metas.FirstOrDefault(_ => _.HasProperty("name", "description"));
if (followers == null) { Console.WriteLine("Sorry, Can't Find Profile :("); return; }
var content = followers.Attributes["content"].Value.StopAt('-');
Console.WriteLine(content);
和HasProperty()& STOPAT()
public static bool HasProperty(this HtmlNode node, string property, params string[] valueArray)
{
var propertyValue = node.GetAttributeValue(property, "");
var propertyValues = propertyValue.Split(' ');
return valueArray.All(c => propertyValues.Contains(c));
}
public static string StopAt(this string input, char stopAt)
{
int x = input.IndexOf(stopAt);
return input.Substring(0, x);
}
然而,这仍然不是我要找的答案。我仍然有一个HTML的残骸与我在谷歌浏览器中查看它时收到的HTML结构相同。在HTML中进行一些搜索我设法为包含内容的元标记搜索无内容的html。这是可以的,但如果我继续这种查找HTML内容的方法,那么它可能不一样:(