Скребок сайта с использованием 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