Как парсить страницы AJAX?
-
06-07-2019 - |
Вопрос
Подскажите, пожалуйста, как парсить страницы AJAX.
Решение
Обзор:
Любая очистка экрана сначала требует ручной проверки страницы, из которой вы хотите извлечь ресурсы.При работе с AJAX вам обычно нужно проанализировать нечто большее, чем просто HTML.
При работе с AJAX это просто означает, что нужное вам значение отсутствует в исходном HTML-документе, который вы запрашивали, но будет выполнен Javascript, который запрашивает у сервера дополнительную информацию, которую вы хотите.
Поэтому обычно вы можете просто проанализировать javascript и посмотреть, какой запрос делает javascript, и вместо этого просто вызвать этот URL-адрес с самого начала.
Пример:
Возьмем это в качестве примера: предположим, что страница, с которой вы хотите выполнить парсинг, имеет следующий скрипт:
<script type="text/javascript">
function ajaxFunction()
{
var xmlHttp;
try
{
// Firefox, Opera 8.0+, Safari
xmlHttp=new XMLHttpRequest();
}
catch (e)
{
// Internet Explorer
try
{
xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e)
{
try
{
xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
}
catch (e)
{
alert("Your browser does not support AJAX!");
return false;
}
}
}
xmlHttp.onreadystatechange=function()
{
if(xmlHttp.readyState==4)
{
document.myForm.time.value=xmlHttp.responseText;
}
}
xmlHttp.open("GET","time.asp",true);
xmlHttp.send(null);
}
</script>
Тогда все, что вам нужно сделать, это вместо этого выполнить HTTP-запрос к time.asp того же сервера. Пример из w3schools.
Расширенный парсинг с помощью C++:
Для сложного использования, а также если вы используете C++, вы также можете рассмотреть возможность использования механизма javascript Firefox. ПаукОбезьяна для выполнения javascript на странице.
Расширенный парсинг с помощью Java:
Для сложного использования, а также если вы используете Java, вы также можете рассмотреть возможность использования механизма javascript Firefox для Java. Носорог
Расширенный парсинг с помощью .NET:
Для сложного использования, а также если вы используете .Net, вы также можете рассмотреть возможность использования сборки Microsoft.vsa.Недавно заменен на ICodeCompiler/CodeDOM.
Другие советы
На мой взгляд, самое простое решение - это использовать Casperjs , основу, основанную на браузерном браузере phantomjs без ключа WebKit.
Вся страница загружена, и очень легко очистить любые данные, связанные с ajax. Вы можете проверить этот базовый учебник, чтобы узнать, Автоматизация & amp; Соскоб с PhantomJS и CasperJS
Вы также можете взглянуть на этот пример кода, как разобраться, как Google предлагает ключевые слова:
/*global casper:true*/
var casper = require('casper').create();
var suggestions = [];
var word = casper.cli.get(0);
if (!word) {
casper.echo('please provide a word').exit(1);
}
casper.start('http://www.google.com/', function() {
this.sendKeys('input[name=q]', word);
});
casper.waitFor(function() {
return this.fetchText('.gsq_a table span').indexOf(word) === 0
}, function() {
suggestions = this.evaluate(function() {
var nodes = document.querySelectorAll('.gsq_a table span');
return [].map.call(nodes, function(node){
return node.textContent;
});
});
});
casper.run(function() {
this.echo(suggestions.join('\n')).exit();
});
Если у вас получится, попробуйте проверить дерево DOM. Selenium делает это как часть тестирования страницы. Он также имеет функции для нажатия кнопок и перехода по ссылкам, что может быть полезно.
Лучший способ очистить веб-страницы с помощью Ajax или страниц общего назначения с использованием Javascript - это использовать сам браузер или безголовый браузер (браузер без графического интерфейса). В настоящее время phantomjs - это хорошо продвигаемый безголовый браузер, использующий WebKit. Альтернативой, которую я использовал с успехом, является HtmlUnit (в Java или .NET через IKVM , который является имитированным браузером. Другой известной альтернативой является использование инструмента веб-автоматизации, такого как Селен .
Я написал много статей на эту тему, таких как веб-очистка Ajax и Javascript сайты и автоматическая проверка подлинности OAuth без браузера для Twitter , В конце первой статьи есть много дополнительных ресурсов, которые я собираю с 2011 года.
Зависит от страницы AJAX. Первая часть очистки экрана определяет, как работает страница. Есть ли какая-то переменная, через которую вы можете перебирать все данные со страницы? Лично я использовал Web Scraper Plus для множества задач, связанных с очисткой экрана, потому что это дешево, не сложно Для начала, непрограммисты могут заставить его работать относительно быстро.
Примечание: Условия использования, вероятно, есть где-то, что вы можете проверить, прежде чем делать это. В зависимости от сайта, перебирая все, могут появиться некоторые флаги. Р>
Мне нравится PhearJS , но это может быть частично, потому что я его построил.
Тем не менее, это служба, которую вы запускаете в фоновом режиме, которая говорит по HTTP (S) и отображает страницы как JSON для вас, включая любые метаданные, которые вам могут понадобиться.
В качестве недорогого решения вы также можете попробовать SWExplorerAutomation (SWEA). Программа создает API автоматизации для любого веб-приложения, разработанного с использованием HTML, DHTML или AJAX. Р>
Я думаю, что ответ Брайана Р. Бонди полезен, когда исходный код легко читается. Я предпочитаю простой способ использования таких инструментов, как Wireshark или HttpAnalyzer, для захвата пакета и получения URL-адреса от " Хоста " поле и "GET"; поле. р>
Например, я перехватываю пакет, подобный следующему:
GET /hqzx/quote.aspx?type=3&market=1&sorttype=3&updown=up&page=1&count=8&time=164330
HTTP/1.1
Accept: */*
Referer: http://quote.hexun.com/stock/default.aspx
Accept-Language: zh-cn
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)
Host: quote.tool.hexun.com
Connection: Keep-Alive
Тогда URL-адрес:
http://quote.tool.hexun.com/hqzx/quote.aspx?type=3&market=1&sorttype=3&updown=up&page=1&count=8&time=164330
Selenium WebDriver - хорошее решение: вы программируете браузер и автоматизируете то, что необходимо сделать в браузере. Браузеры (Chrome, Firefox и т. Д.) Предоставляют свои собственные драйверы, которые работают с Selenium. Поскольку он работает как автоматический РЕАЛЬНЫЙ браузер , страницы (включая javascript и Ajax) загружаются так же, как и с человеком, использующим этот браузер.
Недостатком является то, что он медленный (так как вы, скорее всего, хотели бы подождать загрузки всех изображений и сценариев, прежде чем выполнять очистку на этой отдельной странице).
Ранее я связывался с платежеспособным агентством MIT и EnvJS в качестве ответов на вопрос о страницах Ajax. Эти проекты больше не доступны.
Из-за чистой необходимости я изобрел еще один способ на самом деле соскоблить страницы Ajax, и он сработал для сложных сайтов, таких как findthecompany, у которых есть методы для поиска безголовых движков JavaScript и отображения данных.
Техника состоит в том, чтобы использовать хромированные расширения для скребкования. Расширения Chrome - лучшее место для очистки страниц Ajax, потому что они фактически позволяют нам получить доступ к DOM, модифицированному JavaScript. Техника заключается в следующем, я, конечно, когда-нибудь открою исходный код. Создайте расширение Chrome (при условии, что вы знаете, как его создать, его архитектуру и возможности. Это легко освоить и попрактиковаться, поскольку существует множество примеров),
<Ол>Пожалуйста, прокомментируйте, если вы не можете понять, и я могу написать это лучше. ( Первая попытка ). Кроме того, я пытаюсь выпустить пример кода как можно скорее.