Название гласит все. Пожалуйста, сообщите, как очистить страницы AJAX.Как вы очищаете страницы 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 того же сервера. Example from w3schools.
Расширенный соскоб с C++:
Для комплексного использования, и если вы используете C++ вы можете также рассмотреть вопрос об использовании Firefox JavaScript двигателя SpiderMonkey для выполнения JavaScript на странице.
Расширенный соскоб с Java:
Для комплексного использования, и если вы используете Java вы могли бы также рассмотреть вопрос об использовании Firefox JavaScript двигателя для Java Rhino
Advanced соскоб с .NET:
Для комплексного использования, а также если вы используете .Net, вы также можете рассмотреть возможность использования сборки Microsoft.vsa. Недавно был заменен на ICodeCompiler/CodeDOM.
Зависит от страницы ajax. Первая часть экранирования экрана - это определение того, как работает страница. Есть ли какая-то переменная, которую вы можете перебирать, чтобы запросить все данные со страницы? Лично я использовал Web Scraper Plus для множества задач, связанных с очисткой экрана, потому что это дешево, не сложно начать, а не программисты могут заставить его работать относительно быстро.
Боковое примечание: Условия использования, вероятно, где-то вы можете проверить перед этим. В зависимости от сайта, итерация через все может поднять некоторые флаги.
Если вы можете получить его, попробуйте изучить дерево DOM. Selenium делает это как часть тестирования страницы. Он также имеет функции, чтобы нажимать кнопки и следовать ссылкам, что может быть полезно.
В скрипте клиента selenium вы можете использовать функцию `get_html_source()`, но он возвращает обычный источник, а не сгенерированный (пост-AJAX) источник. Если вы знаете, как получить доступ к сгенерированному источнику, сообщите нам. – Jabba 2011-04-13 02:31:49
В качестве недорогого решения вы также можете попробовать SWExplorerAutomation (SWEA).Программа создает API автоматизации для любого веб-приложения, разработанного с использованием HTML, DHTML или AJAX.
Я ранее связывался с растворителем MIT и EnvJS в качестве своих ответов на очистку страниц Ajax. Эти проекты кажутся недоступными.
Из-за явной необходимости я изобрел еще один способ на самом деле очистить страницы Ajax, и он работал на таких жестких сайтах, как findthecompany, которые имеют методы поиска безглавых javascript-движков и не показывают никаких данных.
Техника заключается в использовании хромовых расширений для очистки. Расширения Chrome - лучшее место для очистки страниц Ajax, потому что они фактически позволяют нам получить доступ к модифицированному Javascript DOM. Техника следующая: я обязательно открою исходный код в какой-то момент. Создать расширение хром (предполагая, что вы знаете, как создать, и его архитектура и возможности. Это легко учиться и на практике, поскольку есть много образцов),
- Используйте скрипты содержания для доступа к DOM, с помощью XPath. В значительной степени получить весь список или таблицу или динамически визуализированный контент, используя xpath в переменной, как строку HTML Узлы. (Только контент-скрипты могут обращаться к DOM, но не могут обращаться к URL-адресу с помощью XMLHTTP)
- Из сценария контента, используя передачу сообщений, передайте всю разделенную DOM как строку, в фоновый скрипт. (Фоновые скрипты могут разговаривать с URL-адресами, но не могут касаться DOM). Мы используем передачу сообщений, чтобы заставить их говорить.
- Вы можете использовать различные события для прокрутки веб-страниц и передачи каждого урезанного содержимого HTML-кода в фоновый скрипт.
- Теперь используйте фоновый скрипт, чтобы поговорить с внешним сервером (на локальном хосте), простым, созданным с помощью Nodejs/python. Просто отправьте все HTML-узлы в виде строки, на сервер, где сервер будет просто сохранять содержимое, размещенное на нем, в файлы с соответствующими переменными для идентификации номеров страниц или URL-адресов.
- Теперь вы очистили содержимое AJAX (HTML-узлы как строку), но это частичные узлы html. Теперь вы можете использовать свою любимую библиотеку XPATH для загрузки их в память и использовать XPATH для очистки информации до таблиц или текста.
Прошу прокомментировать, если вы не можете понять, и я могу написать его лучше. (Первая попытка). Кроме того, я пытаюсь как можно скорее выпустить образец кода.
Лучший способ очистить веб-страницы с помощью Ajax или на общих страницах с помощью Javascript - это браузер или браузер без браузера (браузер без GUI). В настоящее время phantomjs является хорошо продвинутым браузером без браузера с использованием WebKit. Альтернатива, которую я с успехом является HtmlUnit (в Java или .NET через IKVM, что моделируемый браузер. Другая известная альтернатива с помощью инструмента веб-автоматизации как Selenium.
Я написал много статей на эту тему, как и web scraping Ajax and Javascript sitesautomated browserless OAuth authentication for Twitter. В конце первой статьи есть много дополнительных ресурсов, которые я компилирую с 2011 года.
Я думаю, что ответ Брайана Р. Бонди полезен, когда исходный код легко читается. используя инструменты, такие как Wireshark или HttpAnalyzer, чтобы захватить пакет и получить URL-адрес из поля «Host» и «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
На мой взгляд Простейшая решением является использование Casperjs, рамки на основе WebKit безгласный браузер phantomjs.
Вся страница загружена, и очень легко очистить любые связанные с ajax данные. Вы можете проверить это базовый учебник, чтобы узнать Automating & Scraping with PhantomJS and 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();
});
мне нравится PhearJS, но это может быть частично из-за Я его построил.
Это говорит о том, что это сервис, который вы запускаете в фоновом режиме, который говорит HTTP (S) и отображает страницы как JSON для вас, включая любые метаданные, которые могут вам понадобиться.
Веб-драйвер Selenium - хорошее решение: вы программируете браузер и автоматизируете то, что нужно сделать в браузере. Браузеры (Chrome, Firefox и т. Д.) Предоставляют свои собственные драйверы, которые работают с Selenium. Поскольку он работает как автоматический REAL браузер, страницы (включая javascript и Ajax) загружаются так же, как и с человеком, использующим этот браузер.
Недостатком является то, что он медленный (так как вам, скорее всего, нужно подождать, пока все изображения и сценарии загрузятся, прежде чем вы сможете очистить эту страницу).
+100 !!!! работал как шарм. – Atul 2013-04-12 09:46:29
Вау, это была удивительно полезная информация, даже с инструментами, такими как phantomjs, которые теперь доступны, зная, как настраивать страницу на странице, используя указанный метод, гораздо удобнее, когда вы изучили, что происходит за поддержкой сцены. Брайан +1 – brendosthoughts 2013-06-20 08:55:01