Web Scraping в расширении Google Chrome (API JavaScript + Chrome) - PullRequest
68 голосов
/ 28 июня 2011

Каковы наилучшие варианты для выполнения Web Scraping не открытой в данный момент вкладки из расширения Google Chrome с JavaScript и другими доступными технологиями. Также принимаются другие JavaScript-библиотеки.

Важно скрыть скребок, чтобы он вел себя как обычный веб-запрос . Нет признаков AJAX или XMLHttpRequest, как X-Requested-With: XMLHttpRequest или Origin.

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

Есть ли какие-либо хуки в любом API, специфичном для WebKit / Chrome, которые можно использовать для создания обычного веб-запроса и получения результатов для манипуляций?

var pageContent = getPageContent(url); // TODO: Implement
var items = $(pageContent).find('.item');
// Display items with further selections

Бонусные баллы за выполнение этой работы из локального файла на диске , для начальной отладки. Но если это единственное, что останавливает решение, не обращайте внимания на бонусные очки.

Ответы [ 7 ]

12 голосов
/ 25 августа 2011

Попытайтесь использовать XHR2 responseType = "document" и вернуться к (new DOMParser).parseFromString(responseText, getResponseHeader("Content-Type")) с my text/html patch . См. https://gist.github.com/1138724 для примера того, как я обнаруживаю поддержку responseType = "document (синхронно проверяя response === null для URL объекта, созданного из text/html blob).

Используйте Chrome WebRequest API , чтобы скрыть X-Requested-With и т. Д. Заголовки.

10 голосов
/ 25 августа 2011

Если вы хорошо смотрите на что-то помимо плагина Google Chrome, посмотрите на phantomjs , который использует Qt-Webkit в фоновом режиме и работает так же, как браузер, включающий запросы ajax. Вы можете назвать его безголовым браузером, так как он не отображает вывод на экране и вполне может работать в фоновом режиме, пока вы занимаетесь другими делами. Если вы хотите, вы можете экспортировать изображения, PDF из страниц, которые он получает. Он предоставляет интерфейс JS для загрузки страниц, нажатия на кнопки и т. Д., Как у вас в браузере. Вы также можете внедрить пользовательский JS, например, jQuery, на любую страницу, которую вы хотите очистить, и использовать ее для доступа к DOM и экспорта желаемых данных. Поскольку он использует Webkit , его рендеринг точно такой же, как в Google Chrome.

Другой вариант - использовать Aptana Jaxer , который основан на Mozilla Engine и сам по себе является очень хорошей концепцией. Его также можно использовать как простой инструмент для чистки.

7 голосов
/ 27 ноября 2014

После того, как был задан этот вопрос, было выпущено много инструментов.

artoo.js является одним из них.Это кусок JavaScript-кода, предназначенный для запуска в консоли вашего браузера, чтобы предоставить вам некоторые утилиты очистки.Он также может быть использован как расширение Chrome.

6 голосов
/ 30 августа 2011

Скраб веб-страниц как бы запутан в расширении Chrome. Некоторые моменты:

  • Вы запускаете сценарии содержимого для доступа к DOM.
  • Фоновые страницы (по одной на браузер) могут отправлять и получать сообщений в сценарии содержимого. То есть вы можете запустить скрипт содержимого, который устанавливает конечную точку RPC и запускает указанный обратный вызов в контексте фоновой страницы в качестве ответа.
  • Вы можете выполнять скрипты содержимого во всех фреймах веб-страницы, а затем сшивать дерево документа (состоящее из фреймов 1..N, содержащихся на странице).
  • Как С.К. Предполагается, что ваша фоновая страница может отправлять данные в виде XMLHttpRequest на какой-то облегченный HTTP-сервер, который прослушивает локально.
5 голосов
/ 07 июля 2011

Я не уверен, что это полностью возможно только с помощью JavaScript, но если вы можете настроить выделенный PHP-скрипт для своего расширения, который использует cURL для извлечения HTML-кода для страницы, PHP-скрипт может очистить страницу для вас и ваших расширение может прочитать его через запрос AJAX.

Тем не менее, текущая страница, на которую выполняется очистка, не будет знать, что это AJAX-запрос, потому что к нему обращаются через cURL.

4 голосов
/ 31 августа 2011

Я думаю, вы можете начать с этого примера .

Так что в принципе вы можете попробовать использовать комбинацию Extension + Plugin. Расширение будет иметь доступ к DOM (включая плагин) и управлять процессом. И плагин будет отправлять фактические запросы HTTP.

Я могу порекомендовать использовать Firebreath в качестве кроссплатформенной платформы плагинов Chrome / Firefox, в частности взгляните на этот пример: Firebreath - Создание + HTTP + Запросы + с помощью + SimpleStreamsHelper

2 голосов
/ 12 августа 2011

не могли бы вы просто сделать небольшую хитрость в фрейме?если вы загружаете URL в выделенный фрейм, у вас есть dom в объекте документа, и вы можете делать выбор jquery, нет?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...