Скребок сайта с использованием jquery и ajax
Я хочу иметь возможность манипулировать html данного URL-адреса. Что-то вроде html соскабливания. Я знаю, что это можно сделать с помощью curl или некоторой библиотеки скремблирования. Но я хотел бы знать, можно ли использовать jquery для запроса запроса на url с помощью ajax и получить html URL-адреса, а также запустить код jquery на html вернулся?
Спасибо
Ответы
Ответ 1
Я хотел бы указать, что есть ситуации, когда вполне приемлемо использовать jQuery для очистки экранов по доменам. Гаджеты боковой панели Windows запускаются в "локальной зоне машины", что позволяет выполнять междоменные скрипты.
И jQuery действительно имеет возможность применять селекторов к полученному html-контенту. Вам просто нужно добавить селектор в параметр url метода load() после пробела.
Пример кода гаджета ниже проверяет эту страницу каждый час и сообщает общее количество просмотров страниц.
<html>
<head>
<script type="text/javascript" src="jquery.min.js"></script>
<style>
body {
height: 120px;
width: 130px;
background-color: white;
};
</style>
</head>
<body>
Question Viewed:
<div id="data"></div>
<script type="text/javascript">
var url = "http://stackoverflow.com/questions/1936495/website-scraping-using-jquery-and-ajax"
updateGadget();
inervalID = setInterval("updateGadget();", 60 * 1000);
function updateGadget(){
$(document).ready(function(){
$("#data").load(url + " .label-value:contains('times')");
});
}
</script>
</body>
</html>
Ответ 2
Вы не можете выполнить запрос Ajax другому доменному имени, чем тот, на котором находится ваш веб-сайт, из-за Same Origin Policy; что означает, что вы не будете в состоянии делать то, что хотите... По крайней мере, прямо.
Решение было бы:
- имеют какой-то "прокси" на вашем собственном сервере,
- отправьте запрос Ajax на этот прокси-сервер,
- который, в свою очередь, отобразит страницу на другом доменном имени; и вернуть его в JS-код в ответ на запрос Ajax.
Это можно сделать в нескольких строках с почти любым языком (например, с использованием curl, например PHP)... Или вы можете использовать некоторую функциональность вашего веб-сервера (см. mod_proxy
и mod_proxy_http
, например, для Apache)
Ответ 3
Это не так сложно.
$(document).ready(function() {
baseUrl = "http://www.somedomain.com/";
$.ajax({
url: baseUrl,
type: "get",
dataType: "",
success: function(data) {
//do something with data
}
});
});
Я думаю, что это может дать вам хороший ключ - http://jsfiddle.net/skelly/m4QCt/
Ответ 4
http://www.nathanm.com/ajax-bypassing-xmlhttprequest-cross-domain-restriction/
Единственная проблема заключается в том, что из-за безопасности как в Internet Explorer, так и в FireFox объект XMLHTTPRequest не разрешает выполнять междоменные, кросс-протокольные или кросс-портовые запросы.
Ответ 5
Вместо curl вы можете использовать инструмент, например Selenium, который автоматизирует загрузку страницы в браузере. Вы можете запустить JavaScript с ним.
Ответ 6
Я делаю это с небольшим прокси-сервером PHP, временно снимая теги IMG, чтобы ускорить время загрузки. Я обернул его в плагин jQuery, который делает его относительно простым в использовании, см. здесь для ссылки demo/github