Как получить динамический контент на сайте и сохранить его? - PullRequest
4 голосов
/ 15 апреля 2010

Например мне нужно взять с http://gmail.com/ количество свободного места:

Over <span id=quota>2757.272164</span> megabytes (and counting) of free storage.

А затем сохраните эти числа в базе данных MySql. Число, как вы видите, динамически меняется.

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

Спасибо.

Ответы [ 4 ]

3 голосов
/ 15 апреля 2010

Поскольку Gmail не предоставляет API для получения этой информации, похоже, что вы хотите провести просмотр веб-страниц .

Соскоб в Интернете (также называемый веб) сбор данных или извлечение данных через Интернет) компьютерная программная техника извлечение информации с сайтов

Существует множество способов сделать это, как упомянуто в статье в Википедии, на которую мы ссылались ранее:

Человек копирует и вставляет: иногда даже лучшая технология Web-выскабливания может не заменяет ручной осмотр человека и копировать и вставить, а иногда это может быть единственным работоспособным решением, когда сайты для соскоб явно установить барьеры, чтобы предотвратить машину автоматизации.

Подрезка текста и регулярное выражение соответствие: простой, но мощный подход к извлечению информации из Веб-страницы могут быть основаны на UNIX команда grep или регулярное выражение соответствующие средства программирования языки (например, Perl или Python).

HTTP программирование: статическое и динамическое Веб-страницы могут быть получены путем публикации HTTP-запросы к удаленному веб-серверу используя программирование сокетов.

Разбор DOM: встраивая полноценный веб-браузер, такой как Internet Explorer или Mozilla Web управление браузером, программы могут получить динамическое содержимое, сгенерированное клиентские скрипты. Эти веб-браузер элементы управления также анализируют веб-страницы в DOM-дерево, на основе которого программы могут получить части веб-страниц.

HTML-парсеры: некоторые полуструктурированные языки запросов данных, такие как XML язык запросов (XQL) и язык гипертекстовых запросов (HTQL), может использоваться для анализа HTML-страниц и извлекать и преобразовывать веб-контент.

Программное обеспечение для поиска в Интернете: существует множество Доступно программное обеспечение может быть использован для настройки веб-соскоб решения. Это программное обеспечение может обеспечить веб-интерфейс записи, который удаляет необходимость писать вручную Скраб-коды или скрипты функции, которые можно использовать для извлечения и трансформировать веб-контент, и интерфейсы базы данных, которые могут хранить очищенные данные в локальных базах данных.

Семантическая аннотация с распознаванием: Веб-страницы могут включать метаданные или семантические разметки / аннотации, которые могут использовать для поиска конкретных данных сниппеты. Если аннотации встраивается в страницы, как микроформат делает эту технику можно рассматривать как особый случай разбора DOM. В другой случай, аннотации, организован в семантический слой 2 , хранятся и управляются отдельно веб-страницы, так что веб-скребки могут получить схему данных и инструкции из этого слоя, прежде чем соскоб стр.

И прежде чем я продолжу, пожалуйста, помните о юридических последствиях всего этого. Я не знаю, соответствует ли это условиям gmail, и я бы порекомендовал проверить их, прежде чем двигаться дальше. Вы также можете оказаться в черном списке или столкнуться с другими проблемами, такими как эта.

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

Как разработчик ruby, мне нравится использовать Mechanize и nokogiri . Используя PHP, вы можете взглянуть на такие решения, как Sphider .

1 голос
/ 15 апреля 2010

Первоначально я думал, что это невозможно, думая, что число было инициализировано javascript.

Но если вы отключите javascript, то число будет в теге span, и, вероятно, функция javascript увеличит его через регулярный интервал.

Таким образом, вы можете использовать curl, fopen и т. Д. Для чтения содержимого из URL, а затем вы можете проанализировать содержимое в поисках этого значения, чтобы сохранить его в базе данных. И настройте эту задачу на cron, чтобы делать это регулярно.

Есть много ссылок о том, как это сделать. Включая ТАК. Если вы застряли, просто откройте другой вопрос.

Предупреждение. У Google есть способы выяснить, удаляются ли их приложения, и они будут блокировать ваш IP на определенный период времени. Прочитайте Google мелким шрифтом. Это случилось со мной.

0 голосов
/ 15 апреля 2010

Оставляя в стороне вопросы законности в данном конкретном случае, я бы предложил следующее:

Пытаясь атаковать что-то невозможное, остановитесь и подумайте, откуда взялась невозможность, и выбрали ли вы правильный путь.

Вы действительно думаете, что кто-то в его уме выпустит новое http соединение или, что еще хуже, будет держать открытое comet соединение, чтобы посмотреть, выросла ли общая память? Для анонимного пользователя? Просто посмотрите и найдите функцию, которая вычисляет значение на основе некоторого значения инициализации и текущего времени.

0 голосов
/ 15 апреля 2010

Один из способов увидеть, как вы это делаете (что, возможно, не самый эффективный способ), - это использовать PHP и YQL (от Yahoo!). В YQL вы можете указать веб-страницу (www.gmail.com) и XPATH, чтобы получить значение внутри тега span. По сути, это веб-анализ, но YQL предоставляет вам хороший способ сделать это, используя 4-5 строк кода.

Вы можете обернуть все это в функцию, которая вызывается каждые x секунд или в любой период времени, который вы ищете.

...