- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
Тренды маркетинга в 2024 году: мобильные продажи, углубленная аналитика и ИИ
Экспертная оценка Адмитад
Оксана Мамчуева
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
?