2016-09-01 4 views
4

Я видел видео для Portia, и я думал о том, как можно реализовать такой инструмент. В основном, имея веб-приложение, в которое вы вводили URL-адрес, он загрузится (например, если бы вы загрузили его на отдельной вкладке браузера), а затем вы сможете щелкнуть элементы на странице и визуально выбрать данные, которые вы хотите извлечь.Существуют ли другие способы реализации визуального веб-скребка, помимо загрузки данных внутри локального iframe?

Идея я в настоящее время заключается в следующем:

  1. извлекать содержимое веб-сайта с помощью обезглавленный браузера
  2. есть маршрут в веб-приложение, который будет служить Царапины содержание
  3. встраивать маршрут в IFRAME на странице выбора данных, чтобы обойти одну и ту же политику происхождения
  4. интегрировать библиотеку инспекторов JavaScript, чтобы визуально маркировать элементы, предназначенные для очистки.
  5. создать набор селекторов
  6. использовать селекторы для извлечения данных

Я интересно, если есть /, что другие подходы справиться с этим, в частности, части 1 до 3.

ответ

2

Учтите, что объекты, которые вы хотите очистить, вероятно, не активны (например, они не реагируют на нажатия или нажатия клавиш).

Даже если они это сделают, они, вероятно, не будут обрабатывать мета-ключи, такие как Ctrl или Shift.

Так что вы можете сделать, это построить систему так же, как прокси-сервер, переписав внутренние URL-адрес (это вы должны делать, независимо), кроме что вы также инъекционные Javascript код реагировать, скажем, нажмите ,

Тогда вам не нужно будет не IFRAME, а просто перейти к www.your-scraper.com, запросить www.site-to-scrape.com в форме, получить присваивается случайный dab3b19f и попадаю на dab3b19f.your-scraper.com - и увидите версию www.site-to-scrape.com где все (текст?) Объекты среагировать для Ctrl-Click.

Пользователь должен затем иметь возможность перемещаться по сайту в обычном режиме, за исключением того, что удерживание, например, клавиша Ctrl при нажатии не будет передавать клик на объект с кликом, а затем обработчику, который затем может идентифицировать цель события и вычислить его путь к CSS, а затем отобразить меню скребков в фиксированном DIV, добавленном к DOM по требованию, и удален сверху близко.

Это означает, что вам нужно будет обнаружить и захватить несколько возможных библиотек Javascript, которые могут загружаться на сайте. Если дело будет продолжаться, возможно, вам также понадобится очистить некоторый код скремблирования (например, сайт может проверить целостность DOM или попытаться переписать обработчики в состояния по умолчанию).

В то же время, вы можете также перехватывать и записывать нормальных кликов для того, чтобы иметь возможность дублировать, до точки (это зависит от того, как динамического сайта, и как вы можете взаимодействовать с безголовым браузер). Это позволит вам автоматически переадресовать сайт, сменить страницы и т. Д., Чтобы достичь различных объектов. Затем вы в конечном итоге с серией селекторов и навигационных подсказок, которые могут быть использованы для извлечения данных из страниц можно перемещаться:

start 
click  #menu ul[2] li[1] span 
click  .right.sidebar[1] ul[1] li[5] input[type="checkbox"] 
click  .right.sidebar[1] ul[1] li[5] button 
scrape(TICK) #prices div div[2] div div span p 
scrape(PRIC) #prices div div[2] div div span div span[2] p 

Сценарий выскабливание затем может быть изменен, чтобы добавить, скажем, петли. Это происходит позже.

Вы также получили бы что-то не слишком отличное от Selenium. На самом деле вы можете рассмотреть возможность использования turning Selenium to your purpose.

2

Это не может быть полный ответ вопрос, но поделиться своим опытом с этим.

В одном из проектов, в котором я принимал участие, у нас было расширение браузера Chrome, что позволило точно или выборочно отображать элементы на странице, дать им «имена» и сохранить (мы назвали этот процесс «аннотацией» »), что привело к созданию записи в базе данных, содержащей URL-адрес целевого сайта, имя поля и сгенерированный селектор CSS или выражение XPath.

Расширение было основано на selectorgadget library.

Из того, что я помню, сгенерированные локаторы были либо абсолютными (начал с самого html или body корень), или можно использовать только id атрибуты элемента или один из родительских элементов - подобно тому, как «Копировать XPath» и Инструменты «Копировать CSS-путь» работают в FireBug.

Затем у нас был очень широкий Scrapy паук, который использовал подготовленные аннотации в базе данных, чтобы очистить любой сайт. Ну, это было бы слишком хорошо и легко, чтобы быть правдой. Разумеется, нам пришлось добавить пользовательский код для решения тяжелых динамических веб-страниц, обнаружения ботов, взлома и различной логики веб-сайта.

(улучшит ответ больше).

+0

Спасибо alecxe, есть ли у вас какие-либо мысли по поводу этого, без установки пользователем расширения chrome? Что вы думаете о подходе iframe, о котором я говорил? Я надеялся, что + некоторые библиотеки инспектора элементов JavaScript, чтобы достичь чего-то похожего на то, что делает chrome инспектор. Конечно, не вся функциональность, просто визуальный выбор элемента и выбор селектора css/xpath. – Geo

+0

@Geo, который может работать - это своего рода «мини-браузер» внутри браузера, который имеет дополнительные возможности для выбора и аннотирования элементов. Кстати, я нашел какую-то старую версию расширения и могу предоставить более подробную информацию, если это необходимо - она ​​основана на библиотеке '' selectorgadget' (http://selectorgadget.com/) - вроде старой, но выглядит совершенно связанный с тем, над чем вы работаете. Может быть, есть лучшая/более новая альтернатива этому. – alecxe

+0

уверен, что может быть интересно, спасибо! – Geo