在源头找不到东西,但它就在那里

时间:2014-01-03 04:15:07

标签: c# facebook web-scraping

所以我有这段代码

        string source = "";
        try
        {
            string websiteName = "https://facebook.com/" + Membre.NomMembre;
            source = (new WebClient()).DownloadString(websiteName);
        }
        catch (WebException ex)
        {
            using (var stream = ex.Response.GetResponseStream())
            {
                // Copy stream to buffer.
                var buffer = new byte[stream.Length];
                stream.Read(buffer, 0, (int)stream.Length);

                // Decode byte array to UTF-8 string.
                source = Encoding.UTF8.GetString(buffer);
            }
        }
        if (source.Contains("og:title"))
        {
            Console.WriteLine("{0} is taken.", Membre.NomMembre);
        }

如果我转到facebook.com/pokemon来源,我们可以看到它有og:title 但由于某种原因,我认为它没有找到它。

1 个答案:

答案 0 :(得分:2)

您遇到的实际问题是,您的WebClient被FaceBook拒绝,请求被重定向到“更新您的浏览器页面”。

如果您想查看页面的外观,只需复制source属性的结果并将其另存为HTML页面enter image description here

解决此问题的一种方法是尝试通过添加他们支持的浏览器的用户代理标头来欺骗您的WebClient浏览器代理。我选择了IE10(因为它是我方便的)。要添加标题,请尝试。

WebClient client = new WebClient();
client.Headers.Add("user-agent", "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0)");
source = client.DownloadString(websiteName);

现在真的应该使用Facebook API,这可能会让你被Facebook禁止。