C# 将 Instagram 配置文件下载为 HTML

C# Downloading Instagram Profile As HTML

我一直在尝试下载 public Instagram 个人资料以获取关注者和个人简介等统计信息。我一直在 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

当您使用 Web 请求检索内容时,它 returns 一个 HTML 文档,然后由浏览器呈现以显示内容。

现在,您正在保存服务器给您的 HTML 文档。而不是这样做,你需要在获取细节之前渲染它。一种方法是使用 Web 浏览器控件。如果将 URL 设置为 instragram URL,让渲染引擎处理它,一旦控件触发加载事件,就可以获得渲染的 HTML 输出。

从那里,您可以反序列化为 XmlDocument,并准确确定您需要从呈现的输出中检索哪些详细信息。

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

回答

感谢您提供有关如何下载 HTML 的建议!最后我设法 return 一些 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 的残骸,它的结构与我在 Google Chrome 中看到的 HTML 不同。在 HTML 中进行一些搜索后,我设法在无内容的 html 中找到包含内容的元标记。这没关系,但如果我继续这种查找 HTML 内容的方法,那么它可能不一样 :(