Возможна ли Webscraping без Node? - PullRequest
0 голосов
/ 13 апреля 2019

В настоящее время у меня есть простая веб-страница, которая состоит из файла .js, .css .html. Я не хочу использовать какие-либо вещи Node.js.

В связи с этими ограничениями я хотел бы спросить, можно ли искать содержимое внешних веб-страниц с помощью javascript (например, запускать веб-работника в фоновом режиме).

например. Я хотел бы сделать:

Получить первую URL-ссылку в поиске картинок Google.

Редактировать:

Я сейчас попробовал, и это сработало, но после 2 недель я получил эту ошибку:

Блокирован перекрестный запрос: одна и та же политика происхождения запрещает чтение удаленного ресурса по адресу .... (Причина: отсутствует заголовок CORS ‘Access-Control-Allow-Origin’).

есть идеи, как это решить?

Вот ошибка, описанная firefox: https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS/Errors/CORSMissingAllowOrigin

Ответы [ 3 ]

2 голосов
/ 13 апреля 2019

Да, это возможно. Просто используйте XMLHttpRequest API:

var request = new XMLHttpRequest();
request.open("GET", "https://bypasscors.herokuapp.com/api/?url=" + encodeURIComponent("https://duckduckgo.com/html/?q=stack+overflow"), true);  // last parameter must be true
request.responseType = "document";
request.onload = function (e) {
  if (request.readyState === 4) {
    if (request.status === 200) {
      var a = request.responseXML.querySelector("div.result:nth-child(1) > div:nth-child(1) > h2:nth-child(1) > a:nth-child(1)");
      console.log(a.href);
      document.body.appendChild(a);
    } else {
      console.error(request.status, request.statusText);
    }
  }
};
request.onerror = function (e) {
  console.error(request.status, request.statusText);
};
request.send(null);  // not a POST request, so don't send extra data

Обратите внимание, что мне пришлось использовать прокси для обхода проблем с CORS; если вы хотите сделать это, запустите собственный прокси на своем сервере.

2 голосов
/ 13 апреля 2019

Да, теоретически возможно выполнить «очистку веб-страниц» (т.е. анализ веб-страниц) на клиенте. Однако существует несколько ограничений, и я хотел бы спросить, почему вы не выбрали бы программу, которая запускается на сервере или рабочем столе.

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

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

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

Но реальный вопрос: будет ли это мудрым? Вы когда-нибудь выбрали бы этот подход, когда другие технологии под рукой? Ну нет. В большинстве случаев я не понимаю, почему вы не просто написали бы программу на стороне сервера, используя, например, Chrome без головы.

Если вы не хотите использовать Node - или по какой-то причине не можете развернуть Node - существует множество пакетов соскребания через Интернет и предшествующий уровень техники на таких языках, как Go, C, Java и Python. Найдите менеджер пакетов на предпочитаемом вами языке программирования, и вы, вероятно, найдете несколько.

0 голосов
/ 13 апреля 2019

Я тоже слышал про python для списания, но nodejs + puppeteer пинает задницу ... И его довольно легко выучить

...