Периодическое сканирование HTML - PullRequest
2 голосов
/ 14 сентября 2011

Я планирую создать сайт, на котором сервер будет периодически сканировать другой сайт, чтобы собирать контент для определенных записей в моей базе данных. Мои квесты следующие:

  1. Как заставить сервер своевременно выполнять сканирование?
  2. Можете ли вы заставить его выполнять php или какой язык вы используете для сканирования?
  3. Есть ли хорошие API для этого?
  4. Должен ли я подумать о создании собственного? Если так, то несколько советов о том, как начать, будут великолепны

Обычно я хочу, чтобы сервер выполнял скрипт (скажем, каждый час), который находит все записи в базе данных, которые еще не были просканированы на другом сайте. Он примет определенное значение из этих записей и будет использовать их для сканирования другого сайта ... он может запросить URL-адрес, подобный следующему: www.anothersite.com/images?q=entryindb.

Что я хочу сделать, так это просканировать HTML, вернуть массив и записать значения в базу данных. Это то, что я хочу, чтобы сканер искал

Find all instances of 
<img> inside <a> inside <td> inside <tr> inside <tbody> inside <table> inside <div id='content'>
Return array of the img.src from all instances.

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

ОБНОВЛЕНИЕ : я буду использовать сервер на основе linux, так что я предполагаю, что мне следует делать с помощью сценариев chron?

Ответы [ 4 ]

3 голосов
/ 14 сентября 2011
  1. Вы можете использовать cron
  2. Да, вы можете запустить скрипт PHP
  3. Ничего похожего на API полного сканирования (AFAIK), но есть классы, которые помогут вам анализировать и просматривать документы DOM.
  4. Вы можете настроить что-либо за считанные минуты, если выполните следующие шаги

1. Вам нужно phpQuery , чтобы сделать вашу жизнь проще с этим

Скачать phpQuery-0.9.5.386-onefile.zip с здесь .

2. Ваш PHP-файл будет выглядеть примерно так

require_once 'phpQuery-onefile.php';
$html = file_get_contents('http://www.othersite.com');
phpQuery::newDocumentXHTML($html);

$elements = pq('#content table tbody tr td a img');
$images = array();
foreach($elements as $img){
    $images[] = pq($img)->attr('src');
}

Массив $images будет содержать список всех источников изображений.

3. Сохраните приведенный выше код в файле, скажем crawler.php

Затем на вкладке cron, если вы хотите, чтобы сканер запускался каждый час, вы должны сделать:

0 * * * * php /path/to/your/crawler.php 
2 голосов
/ 14 сентября 2011

Вы можете извлечь HTML с помощью cURL ( screenscraping ) и написать анализатор HTML с php's DOMDocument. Если HTML-код грязный, вы не можете прочитать его напрямую с помощью DOMDocument, но вы можете «вымыть» его, например, с помощью HTMLPurifier , который принимает недопустимый HTML-код и выплевывает все допустимые значения.

Чтобы запустить процесс, сделайте ваш php-скрипт способным запускаться через CLI (командная строка, в отличие от веб-сервера, который, конечно, используется для браузера).

После того, как у вас есть этот скрипт, настройте cronjob (если у вас есть сервер Linux), чтобы запускать ваш скрипт в любой нужный вам период.

Гугл жирными словами.

2 голосов
/ 14 сентября 2011
  1. Вы можете использовать cron, если вы размещаете хостинг в Linux.
  2. Да, вы можете использовать его для запуска PHP.
  3. Ничего из того, что я знаю, но я никогда не смотрел.
  4. Это зависит от вас. См. Следующую документацию, которая, по моему мнению, может быть вам полезна.

ПРИМЕЧАНИЕ. Проверьте с помощью T + C сайтов, которые вы хотите почистить, прежде чем проверять, позволяют ли они это.

http://php.net/file_get_contents

http://php.net/curl

http://php.net/domdocument

0 голосов
/ 14 сентября 2011

Я бы использовал cron для этого.Тем не менее, PHP может быть не лучшим выбором, если вы уже написали сценарий.Python и BeautifulSoup могут быть наиболее подходящими для очистки URL-адресов.

...