Получить данные DOM с сайта - PullRequest
0 голосов
/ 09 ноября 2011

Есть ли шанс получить результаты DOM, когда я нажму на старые сообщения с сайта:

http://www.facebook.com/FamilyGuy

с использованием C # или Java? Я слышал, что можно выполнить скрипт с onclick и получить результаты. Как я могу выполнить этот скрипт:

onclick="(JSCC.get('j4eb9ad57ab8a19f468880561') && JSCC.get('j4eb9ad57ab8a19f468880561').getHandler())(); return false;"

Ответы [ 2 ]

0 голосов
/ 15 ноября 2011

Facebook загружает свой контент динамически с AJAX.Вы можете использовать такой инструмент, как Firebug, чтобы проверить, какой тип запроса сделан, а затем скопировать его.

Или вы можете использовать механизм рендеринга браузера, такой как webkit, чтобы обработать JavaScript для вас и представить полученный HTML: http://webscraping.com/blog/Scraping-JavaScript-webpages-with-webkit/

0 голосов
/ 09 ноября 2011

Я думаю, что older posts ссылка отправляет запрос Ajax и добавляет ответ на страницу. (Я не уверен. Вам следует проверить источник страницы).

Вы можете эмулировать это поведение в C#, Java и JavaScript (у вас уже есть код для javascript).

Edit:

Кажется, что Facebook использует какой-то внутренний API (JSCC) для загрузки контента, и он недокументирован.

Я не знаю об Facebook API разработчиков (вы можете сначала проверить это), но если вы хотите точно подражать тому, что происходит в вашем браузере, тогда вы можете использовать TamperData, чтобы перехватывать GET запросы, когда вы нажимаете на ссылку more posts и находите запрос URL и его параметры .

После того, как вы получите эту информацию, вам нужно 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;
}

Затем вы можете выполнить GET запросов с имеющимся у вас файлом cookie, на URL, полученном при анализе этих JSCC.get().getHandler() запросов с использованием TamperData, и в конечном итоге вы получите то, что вы хотите, в качестве ответа поток:

var webRequest = WebRequest.Create(url) as HttpWebRequest;
webRequest.CookieContainer = GetCookieContainer(url, userName, password);
var responseStream = webRequest.GetResponse().GetResponseStream();

Вы также можете использовать Selenium для автоматизации браузера. Он также имеет C# и Java API (у меня нет опыта использования Selenium).

...