C#将Instagram个人资料下载为HTML

时间:2017-06-15 08:47:24

标签: c# html download instagram html-agility-pack

我一直在尝试将公开的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);

当我保存它时,我得到的只是一堆脚本和一个空白屏幕:

enter image description here

我想知道如何在所有脚本运行并保存html后形成内容

3 个答案:

答案 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)

ANSWER

感谢您提供有关如何下载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内容的方法,那么它可能不一样:(