Скрести часть сайта и уведомить об изменениях - PullRequest
0 голосов
/ 11 января 2012

Сайт моего университета, к сожалению, не предоставляет каналы, но они продолжают публиковать там важную для меня информацию (сроки, даты экзаменов и т. Д.) В виде ссылок на PDF-файлы в определенном разделе сайта.

Как я могу регулярно просматривать этот раздел сайта и получать от меня уведомления (рычать, отправлять что-то подобное).

Обычно я бы использовал wget для его зеркалирования, но как извлечь только части сайта?Есть ли инструмент cli, который может извлечь XHTML через XPATH или аналогичный?

Ответы [ 3 ]

3 голосов
/ 11 января 2012

Попробуйте это:

wget --spider --server-response http://example.com

При этом будут напечатаны заголовки, которые могут содержать атрибут «Длина».Если это изменится, вы можете уведомить себя.

edit : Если это изменится, вы можете скачать весь html-файл, grep для pdf-файла или все, что вы хотите найти (возможно, для"(. *?)")

1 голос
/ 11 января 2012

Ммм ... Вы должны взглянуть на QueryPath. QueryPath упрощает анализ HTML. Что если структура HTML изменится? Что делать, если вы хотите конкретные элементы страницы? QueryPath делает тяжелую работу за вас. Вам нравится JQuery? QueryPath похож на JQuery из PHP.

См .: http://www.ibm.com/developerworks/opensource/library/os-php-querypath/index.html?S_TACT=105AGX01&S_CMP=HP Смотри: http://querypath.org/

0 голосов
/ 13 января 2012

Возможно, вам будет интересно посмотреть Pjscrape (отказ от ответственности: это мой проект). Это инструмент для просмотра веб-страниц, созданный на основе PhantomJS, который предоставляет вам полный доступ к странице в jQuery в контексте браузера без головы. Это позволяет легко извлекать полуструктурированные данные из веб-страниц через командную строку, особенно если страница, которую вы просматриваете, имеет согласованную структуру для новых элементов.

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

pjs.addScraper(
    // the page you're scraping
    'http://www.ischool.berkeley.edu/courses/catalog', 
    // selector for elements you want to pull text from
    '.views-row .views-field-title'
);

// suppress STDOUT logging
pjs.config('log', 'none');

Запуск этого из командной строки дает вам JSON для STDOUT по умолчанию:

~> phantomjs /path/to/pjscrape.js my_script.js
["W10. Introduction to Information","24. Freshman Seminar", ...]

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

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