Помогите настроить парсинг данных с сайта http://megashara.com/

  • Автор темы Автор темы yadzha
  • Дата начала Дата начала

yadzha

A-Parser Pro License
A-Parser Pro
Имеется сайт, допустим -http://megashara.com/
Интерес представляют профиля пользователей. Профиля имеют такую структуру = http://megashara.com/member/7074819. Нужно пройтись по всем профилям, начиная от member/1 до member/700000 и спарсить все емайлы и имена пользователей. Записи сохранять в таком виде: name;email

Подскажите пожалуйста, как правильно настроить парсер для этой задачи?
 
Заходим в Тестовый парсинг - там будем настраивать новый пресет
pj2VK.png


Выбираем парсер
net-http.png
Net::HTTP - этот парсер просто парсит содерживое указанной страницы
Далее добавляем опцию Parse custom result - с помощью этой опции мы можем используя регулярные выражения выделить со страницы нужную информацию
Выбираем какой результат мы будем обрабатывать - {data} - содержимое скачанной страницы, указываем следующее регулярное выражение:
Код:
участнике <b>(.*?)<.*?Имя: <b>(.*?)<
Указываем флаг s - поиск с учетом переноса строки. В нашем регулярном выражении 2 захватыющие группы - первую мы сохраняем в переменную name, вторую в mail
Далее переопределяем формат результата: {name};{mail}\n
В качестве запроса указываем адрес страницы профиля, на которой мы будем тестировать парсинг
Запускаем тест - проверяем что в результат сохраняются необходимые нам данные(последняя строка в логе)

После чего нажимаем иконку сохранить(справа вверху) и все настройки перенесутся в добавление задания(Add task)
1wpiW.png


Из условий задачи нам надо перебрать пользователей от 1 до 700000 - указываем ссылку и макрос {num:1:700000}

собственно и все :)
 
Разбор полетов породил несколько вопросов :)

1. Можно обойтись без регулярок при определении границ парсинга? В ContentDownloader для юзабельно сделан этот нюанс. Или же без регулярок не обойтись и лучше потратить время на их изучение?

2. Второй вопрос вытекает из первого, флаг ' s ' - это символ из регулярок или же это что-то из внутренней логики парсера? Что означают другие символы?

3.
Код:
участнике <b>(.*?)<
Эта регкулярка ищет, как я понимаю, любые символы, до первого символа?
Код:
<
Если в качестве имени будет указан [email protected] - будет ли сохранен данный майл ?

4. На мегашаре емайлы в профилях попадаются еще и в других полях, например:
http://megashara.com/member/7195980 - тут емайл адрес прописан в поле Email: -
Код:
Email: <b><a href="mailto:syrotyuk020895%40mail.ru" target="_blank" rel="nofollow">[email protected]</a></b></div>
http://megashara.com/member/7069431 - на этой страничке юзер оставил свое мыло в поле Откуда:
http://megashara.com/member/787466 - а тут юзер перепутал поля и прописал свой емайл вместо адреса сайта - Сайт: http://[email protected]. Такое мыло тоже нужно спарсить и преобразовать в нормальный вид
http://megashara.com/member/7134313 - в этом примере емайл записан в поле = Вконтакте: [email protected]
http://megashara.com/member/6977724 - тут мыло записано вместо моего мира -
Мой мир: [email protected]
http://megashara.com/member/7173809 - на это страничке мыло вообще неприкаянное в самом низу профиля записано

Собственно вопрос, имеет ли смысл прописывать каждое из возможных условий парсинга или же проще будет прописать одну регулярку, которая будет искать емайлы в любых произвольных местах странички?
 
1. Можно обойтись без регулярок при определении границ парсинга? В ContentDownloader для юзабельно сделан этот нюанс. Или же без регулярок не обойтись и лучше потратить время на их изучение?

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

2. Второй вопрос вытекает из первого, флаг ' s ' - это символ из регулярок или же это что-то из внутренней логики парсера? Что означают другие символы?

это флаг регулярок, подробнее тут http://a-parser.com/wiki/customresult/

3. Да, на оба вопроса

4. Проще последний вариант, т.е. собирать все емейлы по регулярке со страницы
 
А можно пример регулярки, которая будет вытаскивай майл из любого блока со странички?

И еще вопрос, запустил парсер на 1000 потоков для парсинга майлов с другого крупного сайта, посмотрел собранные результаты. Для сравнения запустил Content Downloader на 50 потоков, подождал подольше, пока тотже объем страничек спарсится. В результате, CD собрал в несколько раз больше данных. Я так понимаю, что это может быть связано с тем, что А-парсер перегружает сервер на 1000+ потоках и сервер выдает нам 403 или 500 ошибки? Для такого кол-ва потоков нужно прокси использовать, или тут единственный вариант - уменьшать потоки?
 
Обычно нет необходимости выставлять столько потоков при парсинге какого либо сайта без прокси. 50 потоков апарсера будут в 5-100 раз быстрее любого парсера потипу Content Downloader, которые используют браузерные движки

Примеры и обсуждение регулярок в этой теме http://a-parser.com/posts/1240/
 
Такой еще вопрос возник. Настроил парсер, в первом parse result вытаскиваю никнейм, во втором - любой емайл на страничке. Запускаю в тестовом режиме, все парсит отлично. Добавляю парсер в очередь заданий, запускаю. В результате, ники не парсятся, только емайлы... Где тут баг?
megashara.jpg
 
Такой еще вопрос возник. Настроил парсер, в первом parse result вытаскиваю никнейм, во втором - любой емайл на страничке. Запускаю в тестовом режиме, все парсит отлично. Добавляю парсер в очередь заданий, запускаю. В результате, ники не парсятся, только емайлы... Где тут баг?

Я проверил - парсятся, возможно ты смотришь на несуществующих пользователей?
 
Назад
Верх