2009-12-20 3 views
15

Я хочу иметь возможность манипулировать html данного URL-адреса. Что-то вроде html соскабливания. Я знаю, что это можно сделать с помощью curl или некоторой библиотеки скремблирования. Но я хотел бы знать, можно ли использовать jquery для запроса запроса на url с помощью ajax и получить html URL-адреса, а также запустить код jquery на html вернулся?Скребок сайта с использованием jquery и ajax

Спасибо

+0

Чей HTML вы хотите изменить? У вас есть права на запись на этот URL? –

+1

Обратите внимание, что также возможно (сейчас) сделать что-то подобное с nodejs + jsdom. – HoverHell

ответ

4

Вы не можете сделать запрос Ajax другому доменному имени, чем тот, на котором находится ваш сайт, из-за Same Origin Policy; что означает, что вы не будете в состоянии делать то, что хотите ... По крайней мере, прямо.

Раствор будет:

  • есть своего рода «прокси» на своем собственном сервере,
  • отправить запрос Ajax к прокси-серверу,
  • , который, в свою очередь, будет получать страницу с другим доменным именем; и вернуть его в JS-код в ответ на запрос Ajax.

Это может быть сделано в пару строк практически с любым языком (как PHP, используя локон, например) ... Или вы могли бы использовать некоторые functionnality вашего веб-сервера (см mod_proxy и mod_proxy_http, например, для Apache)

+0

Политика одинакового происхождения не является проблемой в Safari и правильно инициализированном Chrome. –

0

Вместо завитка, вы можете использовать такой инструмент, как Selenium, который позволит автоматизировать загрузку страницы в браузере. Вы можете запустить с ним JavaScript.

8

Я хотел бы указать, что существуют ситуации, когда вполне приемлемо использовать 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> 
+0

Я управлял этим дословным и, похоже, не работает? Firebug просто показывает GET в красном ..., который я воспринимаю, означает «отрицание». –

+2

Я не думаю, что обойдутся междоменные политики, существующие с ajax - вы сможете только развернуть этот код на сайте stackoverflow. –

+0

Одинаковая политика происхождения не является проблемой для Safari и правильно инициализирован Chrome –

0

Я делаю это с небольшим прокси-сервером PHP, временно отбрасывая теги IMG, чтобы ускорить время загрузки. Я обернул его в плагин jQuery, который делает его относительно простым в использовании, см. here для ссылки demo/github

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/

+3

Ваш JsFiddle не работает: 'Отказано от выполнения сценария с 'https://raw.github.com/padolsey/jQuery-Plugins/master/cross- domain-ajax/jquery.xdomainajax.js ', потому что его тип MIME (' text/plain ') не является исполняемым, и включена строгая проверка типа MIME. (индекс): 1 XMLHttpRequest не может загрузить http://www.mashable.com/. В запрошенном ресурсе нет заголовка «Access-Control-Allow-Origin». Поэтому Origin 'http://fiddle.jshell.net' не разрешен доступ' – 8bitjunkie

Смежные вопросы