2017-06-15 65 views
0

我一直在试图下载公共Instagram的个人资料,如追随者和生物获取统计信息。我一直在c#控制台应用程序中执行此操作,并使用HTML Agility Pack下载HTML。C#下载Instagram的个人资料为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一旦所有脚本已经运行并形成内容

回答

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

注:

但是这仍然不是我要找的答案。当我在Google Chrome浏览器中看到HTML时,我仍然遇到了HTML格式的残缺,它与我收到的HTML格式不同。在HTML中做一些搜索,我设法削减了包含内容的元标记的无内容html。这是好的,但如果我要继续寻找HTML内容的这种方法,那么它可能会不一样:(

0

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

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

从那里,您可以反序列化为XmlDocument,并确切地标识需要从呈现的输出中检索哪些细节。

+0

我已经尝试使用Windows窗体WebBrowser,然后使用流编写器保存文档。头和身体标签没有别的。我正在C#控制台应用程序开发webBrowser的工作吗?我也必须改变线程“,因为当前线程不在单线程的公寓” –

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

你如何等待,直到它加载虽然? –

+0

@BenWebb使用'LoadCompleted'事件 –

+0

我有你的代码工作,但它与我的原始输出使用HTML敏捷包 –