Как создать такой парсер?

D
На сайте с 14.01.2007
Offline
153
#31

Busgame, ладно, будем по буквам.

только обещайте отвечать на мои вопросы!

вы знаете, что такое регулярное выражение?

DV
На сайте с 01.05.2010
Offline
644
#32

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

Значит, нужно использовать базу. Проходить по всем имеющимся URL, дёргать страницы и то, что совпало с паттерном, заносить в соответствующее поле. Дальше, создаём поле вроде last_checked, куда заносим дату последней проверки, в unixtimestamp.

Перед очередным парсингом делаем выборку, дёргаем самую старую страницу. Если есть ненапарсенное, его выбираем приоритетно.

Можно пойти дальше и наделить систему интеллектом, чтобы разгрузить ресурсы. Ввести поле last_changed, куда заносить дату последнего изменения. Т.е. дёрнули из базы, сравнили с тем, что выплюнул парсер. Есть разница — апдейтим, нет разницы, апдейтим только last_checked.

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

Этим добиваемся того, что чаще обновляемые страницы прсятся чаще, чем покрытые мхом. Само собой, Коэффициенты ввести, чтобы гибко настраивалось. Кроме этого, нужно ввести параметр $maxTimeNotCheck, чтобы не оказалось, что следующий парсинг будет через пол года.

И лучше запускать в cli, тогда нагрузка будет совсем небольшая.

VDS хостинг ( http://clck.ru/0u97l ) Нет нерешаемых задач ( https://searchengines.guru/ru/forum/806725 ) | Перенос сайтов на Drupal 7 с любых CMS. ( https://searchengines.guru/ru/forum/531842/page6#comment_10504844 )
C
На сайте с 04.02.2005
Offline
291
#33
Правда ума не приложу как эти курлы заставить по ссылкам переходить.

А как вы эту курлу заставляете посетить первую страницу?

Busgame
На сайте с 10.07.2011
Offline
24
#34

Dinozavr, знаю. Но работа с ними порой затруднительна. Сейчас читаю книгу Джеффри Фридла по ним.

---------- Добавлено 30.12.2012 в 15:32 ----------

А как вы эту курлу заставляете посетить первую страницу?

curl_setopt($ch, CURLOPT_URL, $url);

Но тут то мы задаем этот урл, а нужно что бы он брался автоматически из тех, что находядтся на главной странице.

---------- Добавлено 30.12.2012 в 15:35 ----------

Dinozavr, могу отлучиться минут на 5 - 10, но плотно слежу за темой.

D
На сайте с 14.01.2007
Offline
153
#35

Busgame, вы можете вытащить со страницы ссылки?

L9
На сайте с 28.12.2009
Offline
53
#36

парсите ссылки так:

$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 использовать для много страничных сайтов.

Программирую на ASP.NET, MVC, C#, ANGULAR JS
Busgame
На сайте с 10.07.2011
Offline
24
#37
Dinozavr:
Busgame, вы можете вытащить со страницы ссылки?

Да, но делаю это в основном phpQuery. Могу и на регулярных, но с библиотеками удобней.

D
На сайте с 14.01.2007
Offline
153
#38

Busgame, без разницы.

вы знаете, что такое цикл?

Busgame
На сайте с 10.07.2011
Offline
24
#39
Dinozavr:
Busgame, без разницы.
вы знаете, что такое цикл?

Конечно знаю

---------- Добавлено 30.12.2012 в 16:02 ----------

Вы задавайте сразу несколько вопросов, а то серч ругается на короткие ответы.

D
На сайте с 14.01.2007
Offline
153
#40

Busgame, вы понимаете, что весь ваш парсер - это бесконечный цикл, который состоит из:

1. взять ссылку из списка неотпарсенных

2. скормить ссылку curl

3а. проверить содержимое на соответствие вашему шаблону

3б. собрать ссылки и добавить их в список неотпарсенного

4. goto 1

?

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий