当我从网站上单击较旧的帖子时,是否有机会检索 DOM 结果:
http://www.facebook.com/FamilyGuy
使用 C# 还是 Java?我听说可以用onclick
执行脚本并获得结果。 我如何执行此脚本:
onclick="(JSCC.get('j4eb9ad57ab8a19f468880561') && JSCC.get('j4eb9ad57ab8a19f468880561').getHandler())(); return false;"
我认为older posts
链接会发送Ajax
请求并将响应附加到页面。(我不确定。您应该检查页面源代码(。
您可以在 C#
、Java
和 JavaScript
中模拟此行为(您已经拥有 javascript 的代码(。
编辑:
似乎Facebook
使用某种内部 API ( JSCC
( 来加载内容,并且没有文档。
我不知道Facebook
开发人员的 API(您可能想先检查一下(,但如果您想准确模拟浏览器中发生的情况,那么当您单击more posts
链接并找到请求 URL 及其参数时,您可以使用TamperData
拦截GET
请求。
获取此信息后,您必须Login
到应用程序中的帐户并获取身份验证 Cookie。
按照您的要求C#
示例代码:
private CookieContainer GetCookieContainer(string loginURL, string userName, string password)
{
var webRequest = WebRequest.Create(loginURL) as HttpWebRequest;
var responseReader = new StreamReader(webRequest.GetResponse().GetResponseStream());
string responseData = responseReader.ReadToEnd();
responseReader.Close();
// Now you may need to extract some values from the login form and build the POST data with your username and password.
// I don't know what exactly you need to POST but again a TamperData observation will help you to find out.
string postData =String.Format("UserName={0}&Password={1}", userName, password); // I emphasize that this is just an example.
// cookie container
var cookies = new CookieContainer();
// post the login form
webRequest = WebRequest.Create(loginURL) as HttpWebRequest;
webRequest.Method = "POST";
webRequest.ContentType = "application/x-www-form-urlencoded";
webRequest.CookieContainer = cookies;
// write the form values into the request message
var requestWriter = new StreamWriter(webRequest.GetRequestStream());
requestWriter.Write(postData);
requestWriter.Close();
webRequest.GetResponse().Close();
return cookies;
}
然后,您可以使用您拥有的 cookie 执行GET
请求,使用TamperData
分析该JSCC.get().getHandler()
请求获得URL
,最终您将获得所需的响应流:
var webRequest = WebRequest.Create(url) as HttpWebRequest;
webRequest.CookieContainer = GetCookieContainer(url, userName, password);
var responseStream = webRequest.GetResponse().GetResponseStream();
您还可以使用Selenium
进行浏览器自动化。它还具有C#
和Java
API(我没有使用Selenium
的经验(。
AJAX动态加载其内容。您可以使用像Firebug这样的工具来检查发出的请求类型,然后复制它。
或者你可以使用像webkit这样的浏览器渲染引擎为你处理JavaScript并公开生成的HTML:http://webscraping.com/blog/Scraping-JavaScript-webpages-with-webkit/