- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
Все что нужно знать о DDоS-атаках грамотному менеджеру
И как реагировать на "пожар", когда неизвестно, где хранятся "огнетушители
Антон Никонов
Busgame, ладно, будем по буквам.
только обещайте отвечать на мои вопросы!
вы знаете, что такое регулярное выражение?
Лучше на Пайтоне, но я бы на PHP сделал. По опыту написания парсеров, современная машинка напрягаться не должна на таком количестве.
Значит, нужно использовать базу. Проходить по всем имеющимся URL, дёргать страницы и то, что совпало с паттерном, заносить в соответствующее поле. Дальше, создаём поле вроде last_checked, куда заносим дату последней проверки, в unixtimestamp.
Перед очередным парсингом делаем выборку, дёргаем самую старую страницу. Если есть ненапарсенное, его выбираем приоритетно.
Можно пойти дальше и наделить систему интеллектом, чтобы разгрузить ресурсы. Ввести поле last_changed, куда заносить дату последнего изменения. Т.е. дёрнули из базы, сравнили с тем, что выплюнул парсер. Есть разница — апдейтим, нет разницы, апдейтим только last_checked.
Далее, выбирать те URL, разница между проверкой и последним изменением которых больше, чем разница между проверкой и текущим временем.
Этим добиваемся того, что чаще обновляемые страницы прсятся чаще, чем покрытые мхом. Само собой, Коэффициенты ввести, чтобы гибко настраивалось. Кроме этого, нужно ввести параметр $maxTimeNotCheck, чтобы не оказалось, что следующий парсинг будет через пол года.
И лучше запускать в cli, тогда нагрузка будет совсем небольшая.
А как вы эту курлу заставляете посетить первую страницу?
Dinozavr, знаю. Но работа с ними порой затруднительна. Сейчас читаю книгу Джеффри Фридла по ним.
---------- Добавлено 30.12.2012 в 15:32 ----------
А как вы эту курлу заставляете посетить первую страницу?
curl_setopt($ch, CURLOPT_URL, $url);
Но тут то мы задаем этот урл, а нужно что бы он брался автоматически из тех, что находядтся на главной странице.
---------- Добавлено 30.12.2012 в 15:35 ----------
Dinozavr, могу отлучиться минут на 5 - 10, но плотно слежу за темой.
Busgame, вы можете вытащить со страницы ссылки?
парсите ссылки так:
$code = file_get_contents($url);
$doc = new DOMDocument();
$doc->loadHTML($code);
$links = array();
foreach ($doc->getElementsByTagName('a') as $element) {
if ($element->hasAttribute('href')) {
$links[] = $elements->getAttribute('href');
}
}
вот библиотека для DOM элементов :
http://il1.php.net/book.dom
Сам писал такой парсер для биржи ссылок но на C#.
Тут желательно Multi Threading использовать для много страничных сайтов.
Busgame, вы можете вытащить со страницы ссылки?
Да, но делаю это в основном phpQuery. Могу и на регулярных, но с библиотеками удобней.
Busgame, без разницы.
вы знаете, что такое цикл?
Busgame, без разницы.
вы знаете, что такое цикл?
Конечно знаю
---------- Добавлено 30.12.2012 в 16:02 ----------
Вы задавайте сразу несколько вопросов, а то серч ругается на короткие ответы.
Busgame, вы понимаете, что весь ваш парсер - это бесконечный цикл, который состоит из:
1. взять ссылку из списка неотпарсенных
2. скормить ссылку curl
3а. проверить содержимое на соответствие вашему шаблону
3б. собрать ссылки и добавить их в список неотпарсенного
4. goto 1
?