Откройте веб-страницу и проанализируйте ее с помощью JavaScript - PullRequest
28 голосов
/ 28 февраля 2009

Я знаю, что JavaScript может открыть ссылку в новом окне, но возможно ли открыть веб-страницу, не открывая ее в окне или не отображая ее пользователю? Я хочу разобрать эту веб-страницу на наличие текста и использовать ее в качестве переменных.

Возможно ли без какой-либо помощи от языков на стороне сервера? Если это так, пожалуйста, пришлите мне направление, в котором я могу этого достичь.

Спасибо всем

Ответы [ 4 ]

31 голосов
/ 28 февраля 2009

Для этого можно использовать объект XMLHttpRequest . Вот простой пример

var req = new XMLHttpRequest();  
req.open('GET', 'http://www.mydomain.com/', false);   
req.send(null);  
if(req.status == 200)  
   dump(req.responseText);

После загрузки вы можете выполнить синтаксический анализ / извлечение с помощью регулярных выражений javascript в члене req.responseText.

Подробнее ...

На практике вам нужно сделать немного больше, чтобы получить объект XMLHttpRequest кросс-платформенным способом, например ::

var ua = navigator.userAgent.toLowerCase();
if (!window.ActiveXObject)
  req = new XMLHttpRequest();
else if (ua.indexOf('msie 5') == -1)
  req = new ActiveXObject("Msxml2.XMLHTTP");
else
  req = new ActiveXObject("Microsoft.XMLHTTP");

Или использовать библиотеку ...

В качестве альтернативы, вы можете сэкономить на себе и просто использовать библиотеку, например jQuery или Prototype , чтобы позаботиться об этом за вас.

Политика того же происхождения может вас укусить, хотя ...

Обратите внимание, что из-за политики с тем же происхождением запрашиваемая страница должна принадлежать тому же домену, что и страница, выполняющая запрос. Если вы хотите запросить удаленную страницу, вам нужно будет передать ее через сценарий на стороне сервера.

Другой возможный обходной путь - использование Flash для выполнения запроса, который разрешает междоменные запросы, если целевой сайт предоставляет разрешение с соответствующим образом настроенным файлом crossdomain.xml.

Вот хорошая статья на тему политики того же происхождения:

7 голосов
/ 07 октября 2015

Независимо от Origin - это библиотека с открытым исходным кодом, которая позволяет вам использовать исключительно Javascript для скрепинга. Это также решает проблему «того же домена». http://www.whateverorigin.org/

$.getJSON('http://whateverorigin.org/get?url=' + encodeURIComponent('http://google.com') + '&callback=?', function(data){
    alert(data.contents);
});
3 голосов
/ 28 февраля 2009

Вы бы использовали AJAX. Это сделало бы запрос Get на URL-адрес, о котором идет речь, и вернул HTML-код ответа. Jquery делает это очень просто, например

$.get("test.php");

http://docs.jquery.com/Ajax

Andrew

2 голосов
/ 28 февраля 2009

Вы можете открыть новое окно в фрейме:

http://www.w3schools.com/TAGS/tag_iframe.asp

Хотя обратите внимание, что доступ к Javascript ограничен, если открываемый сайт имеет другой URL-адрес. Это необходимо для предотвращения межсайтовых скриптовых атак:

http://en.wikipedia.org/wiki/Cross-site_scripting

...