以编程方式打开网页并检索其html包含为字符串

时间:2011-01-19 15:05:16

标签: c# html

我有一个Facebook帐户,我想提取我朋友的照片及其个人详细信息,如“出生日期”,“已学习”等。我能够为我的每个朋友帐户提取facebook的第一页的地址但我不知道如何以编程方式为我的每个朋友的第一页打开网页并将html包含为字符串以便我可以提取出来他们的个人细节和照片。请帮忙!提前谢谢!

4 个答案:

答案 0 :(得分:9)

您有三个选择:

1- 使用WebClient对象。

WebClient webClient = new webClient();
webClient.Credentials = new System.Net.NetworkCredential("UserName","Password", "Domain");
string pageHTML = WebClient .DownloadString("http://url");`

2- 使用WebRequest。这是最佳解决方案,因为它可以让您更好地控制您的请求。

WebRequest myWebRequest = WebRequest.Create("http://URL");  
WebResponse myWebResponse = myWebRequest.GetResponse();  
Stream ReceiveStream = myWebResponse.GetResponseStream();                 
Encoding encode = System.Text.Encoding.GetEncoding("utf-8"); 
StreamReader readStream = new StreamReader( ReceiveStream, encode ); 
string strResponse=readStream.ReadToEnd();                 
StreamWriter oSw=new StreamWriter(strFilePath);     
oSw.WriteLine(strResponse); 
oSw.Close(); 
readStream.Close();        
myWebResponse.Close(); 

3- 使用WebBrowser(我打赌你不想这样做)

WebBrowser wb = new WebBrowser();
wb.Navigate("http://URL");
string pageHTML = "";
wb.DocumentCompleted += (sender, e) => pageHTML = wb.DocumentText;

打扰一下,如果我错误输入了任何代码,因为我即兴创建它并且我没有语法检查器来检查它的正确性。但我认为应该没问题。


编辑:对于Facebook页面。您可以考虑使用Facebook Graph API:

http://developers.facebook.com/docs/reference/api/

答案 1 :(得分:7)

试试这个:

var html = new WebClient()
               .DownloadString("the facebook account url goes here");

此外,一旦您将HTML下载为字符串,我强烈建议您使用Html Agility Pack来解析它。

答案 2 :(得分:4)

一般来说,你可以做两件事。你可以做的第一件事就是网络抓取。这样您就可以使用以下代码下载html的源代码:

var request = WebRequest.Create("http://example.com");

var response = request.GetResponse();
using (Stream responseStream = response.GetResponseStream())
{
 StreamReader reader = new StreamReader(responseStream);
 string stringResponse = reader.ReadToEnd();
}

stringResponse然后包含网站http://example.com

的Html来源

但是,这可能不是你想要做的。 Facebook有一个SDK,可用于下载此类信息。您可以在以下页面上阅读此内容

http://developers.facebook.com/docs/reference/api/user/

如果您想使用FaceBook API,那么我认为值得改变您的问题或提出一个新问题,因为它更复杂,需要一些自动化和其他编码。然而,这是最好的方式,因为你的代码不太可能每次破坏,它会破坏你想从中获取信息的人的隐私。

例如,如果您使用api查询我,则会得到以下字符串:

{
   "id": "1089655429",
   "name": "Timo Willemsen",
   "birthday": "08/29/1989",
   "education": [
      {
         "school": {
            "id": "115091211836927",
            "name": "Stedelijk Gymnasium Arnhem"
         },
         "year": {
            "id": "127668947248449",
            "name": "2001"
         },
         "type": "High School"
      }
   ]
}

你可以看到我是Timo Wilemsen,21岁,于2001年在@ Stedelijk Gymnasium Arnhem学习。

答案 3 :(得分:0)

将selenium 2.0用于C#。 http://seleniumhq.org/download/

var driver = new FirefoxDriver();
driver.Navigate().GoToUrl("http://www.google.com");
String pageSource = driver.PageSource;