Парсинг почт с сайтов

Discussion in 'Первый конкурс шаблонов' started by Neval, Feb 23, 2018.

  1. Neval

    Neval Client

    Joined:
    Jul 22, 2015
    Messages:
    21
    Likes Received:
    48
    Приветствую!

    Предлагаю вашему вниманию простой шаблон на C# для сбора Email-ов с сайтов.

    Парсил на заказ контактые данные с каталогов, 2гис и т.д. И обычно почт было меньше чем сайтов, а как раз они и были больше всего нужны заказчику. Поэтому решил написать небольшой шаблон для сбора email-ов.
    Даём шаблону список сайтов и получаем список адресов электронной почты.
    [​IMG]
    Парсер работает через браузер и больше подходит для сбора с русскоязычных сайтов.

    Алгоритм:
    • Шаблон берёт ссылку на сайт, переходит на него, ищет email на главной странице.
    • Если нашёл записывает в файл, если нет, то ищет страницу Контакты.
    • Переходит на неё, если есть, и ищет email на ней.
    • Если находит email, записывает его в список, а если не находит то огорченно сообщает нам, что email не найден, и записывает сайт в чёрный список.
    Конечно почты собираются не со всех сайтов. Процент собираемости более 50%. Специально для конкурса проводил тесты на списке сайтов с megastock.ru получалось около 55-60% + присутствует небольшой процент мусора около 3-5 %.
    При парсинге в 45 потоков без картинок 1000 сайтов обрабатывались примерно за 20 минут. Если отключать java-скрипты и прочее, то время составило 10 минут, но адресов электронной почты собиралось примерно на 5-15% меньше.

    Никаких настроек нет, вместе с шаблоном идёт 3 текстовых файла:
    • WebSite -список сайтов;
    • Emails - список почт;
    • BadSite - список сайтов, с которых почты собрать не удалось.
     

    Attached Files:

  2. orka13

    orka13 Client

    Joined:
    May 7, 2015
    Messages:
    1,186
    Likes Received:
    1,071
    В такой же ситуации. Собрал базу организаций с Яндекс.Карт, там раньше было поле с почтой, а теперь убрали, придется парсить с сайтов. Жаль только, что у вас не на запросах, но понимаю, что новичку это труднее освоить. Спасибо и за такой вариант, попробую изучить алгоритм.

    UPD: Блин, а шаб то на трех кубиках C# :-)))))). Отсюда вопрос к ТС: может вариант с работой через браузер обусловлен не низким уровнем знаний, а тем, что на гет-запросах меньше почт находило на странице? Ну типа часть сайтов скрывают скриптами адрес почты от парсинга, и только в браузере подгружают пользователю... Или сравнений не проводили?
     
    Last edited: Feb 23, 2018
    Neval likes this.
  3. Neval

    Neval Client

    Joined:
    Jul 22, 2015
    Messages:
    21
    Likes Received:
    48
    Хотел сделать на запросах, т.к. скорость конечно оставляет желать лучшего, специально к конкурсу уже начал на делать шаблон. Без проблем собирать регуляркой почты с главной страницы в ответе на гет запрос, но встала проблема с ссылкой на страницу контактов, на главной не всегда есть почта. Ссылка на сайтах на страницу контакты отличается и тут у меня трудности. Обычным способом элемент находиться в большинстве случаев везде, обычно страница называется Контакты. Думал сделать как-то с помощью HtmlAgilityPack и Xpatch, но знаний и опыта нет пока в этом, да и сроки поджимали, поэтому решил оставить браузерную версию.
    Но переделать на Get запросы планирую.
     
    Last edited: Feb 23, 2018
    ddw999 and orka13 like this.
  4. Tnyrtin

    Tnyrtin Client

    Joined:
    May 12, 2015
    Messages:
    68
    Likes Received:
    7
    Хочу уточнить, как реализован обход всех страниц на сайте?
    Допустим на сайте порядка 10000 страниц, как алгоритм поиска email.
     
  5. orka13

    orka13 Client

    Joined:
    May 7, 2015
    Messages:
    1,186
    Likes Received:
    1,071
    А зачем? Главная почта сайта есть либо на главной, либо на странице контактов. А ссылка на страницу контактов всегда есть на главной. Вот и строите свой алгоритм по поиске ссылки на "контактную страницу" в коде "главной".
     
  6. Lord_Alfred

    Lord_Alfred Client

    Joined:
    Oct 9, 2015
    Messages:
    2,849
    Likes Received:
    2,456
    Посоветую простой "финт" ушами - чтобы не искать страницу контактов (чтоб не было зависимости от языка) - достаточно будет просто спарсить все ссылки, которые будут на главной странице) И уже в них искать почту. Да, будет чуть больше почт в теории собрано, но разве это плохо? :-)
     
    SergSh, Neval and orka13 like this.
  7. Neval

    Neval Client

    Joined:
    Jul 22, 2015
    Messages:
    21
    Likes Received:
    48
    В этом шаблоне никак, он заточен на поиск по списку сайтов заходя максимум на 2 страницы сайта. Для одного сайта лучше сделать отдельный шаблон, сначала собрать ссылки, а потом get запросами собрать email. В пределах одного сайта это легко реализуется. Можно конечно собрать ссылки с сайта и скормить этому шаблону, но будет неэффективно на мой взгляд.
     
  8. Neval

    Neval Client

    Joined:
    Jul 22, 2015
    Messages:
    21
    Likes Received:
    48
    Можно и такой вариант реализовать, тогда на запросах будет легче сделать, единственное если попадётся сайт с большим количеством ссылок много лишних запросов будет.
     
  9. Neval

    Neval Client

    Joined:
    Jul 22, 2015
    Messages:
    21
    Likes Received:
    48
    Сделал ещё одну браузерную версию шаблона для более полного сбора почт с сайтов - Collecting_Emails_Full.
    Если в первой версии искался только 1 email на главной или на странице контактов, то этот шаблон собирает все почты с главной и со страниц контакты. Часто на странице контактов есть дополнительные email-ы подразделений, отдельных лиц, отделов и т.д. теперь шаблон соберёт их всех. Очистит почты от дублей и внесёт в конечный файл.
    Не обошлось без минусов. Время обработки 1000 сайтов при 45 потоках увеличилось с 20 до 28 минут, но почт при этом было собрано почти в 2 раза больше.

    Теперь буду делать шаблон на гет запросах.
     

    Attached Files:

    Last edited: Feb 27, 2018
    ddw999, kveldulv, auva and 5 others like this.
  10. Kirillzenp

    Kirillzenp Client

    Joined:
    Feb 27, 2018
    Messages:
    94
    Likes Received:
    1
    Зачем эти почты? Для чего это используется?
     
  11. orka13

    orka13 Client

    Joined:
    May 7, 2015
    Messages:
    1,186
    Likes Received:
    1,071
    Автору темы для дополнения своей базы организаций 2гис, мне для дополнения своей базы Яндекс.Карт, среднестатистическим заинтересовавшимся – для сбора целевой аудитории под емеил-рассылку.
     
    Kirillzenp likes this.
  12. Kirillzenp

    Kirillzenp Client

    Joined:
    Feb 27, 2018
    Messages:
    94
    Likes Received:
    1
    Последний вопрос, что за базы организаций, что вам это дает?
     
  13. orka13

    orka13 Client

    Joined:
    May 7, 2015
    Messages:
    1,186
    Likes Received:
    1,071
    :-). Я собираю чтобы популяризировать свой шаблон по парсингу, и чтобы потом продавать эту базу. Ну или рассылкой займусь по тем адресам что в ней.
     
    Kirillzenp likes this.
  14. Neval

    Neval Client

    Joined:
    Jul 22, 2015
    Messages:
    21
    Likes Received:
    48
    В основном используются для дальнейшей рассылки коммерческого предложения, предложения услуг или ещё чего подобного.
     
  15. Neval

    Neval Client

    Joined:
    Jul 22, 2015
    Messages:
    21
    Likes Received:
    48
    Сделал версию шаблона полностью на гет запросах + использовал параллельный цикл.
    Идея шаблона такая: я собрал с 5000 сайтов ссылки на страницы "Контакты". Часто страница имеет вид сайт.ru/contacts. Я проанализировал список страниц и составил список наиболее встречающихся окончаний для страниц "Контакты".
    Отправляем запрос на сайт, ищем там почты, а потом в параллельном цикле отправляем запросы на возможные страницы "Контакты" и собираем почты с ответов. Далее чистим от дублей, отсеиваем некоторый мусор и записываем в конечный файл наши email-ы.
    Т.к. шаблон использует параллельный цикл, необходимо в директивах прописать
    Code (text):
    1. using System.Threading.Tasks;

    В папке с шаблоном есть картинка.
    Время обработки 1000 сайтов значительно сократилось и стало равным 7-8 минут при 45 потоках. Но количество собранных почт немного сократилось. Если браузерный шаблон Collecting_Emails_Full собрал с 1000 сайтов около 1050 почт, то этот шаблон с этих же сайтов - 960.
    Также теперь когда ссылки на сайты закончатся, шаблон почистит от дублей итоговый файл с почтами.
    Порядок работы остался таким же. С шаблоном идут текстовые файлы:
    • BadSite - список сайтов с которых почты не были собраны
    • Emails - собранные почты
    • Website - ссылки на сайты
    • Contacts - список с окончаниями ссылок страниц "Контакты". Вы можете как добавить туда свои окончания так и удалить их
    Закидываем ссылки в файл Website, запускаем шаблон и по окончании работы получаем готовый список почт.
     

    Attached Files:

    ddw999, Canapsis, Ikigai and 2 others like this.
  16. Astraport

    Astraport Client

    Joined:
    May 1, 2015
    Messages:
    2,807
    Likes Received:
    1,914
    Вот бы на запросах кто-нибудь парсинг мыл с групп ФБ кто-то написал...
     
  17. Nord

    Nord Client

    Joined:
    Mar 22, 2012
    Messages:
    1,902
    Likes Received:
    929
  18. Astraport

    Astraport Client

    Joined:
    May 1, 2015
    Messages:
    2,807
    Likes Received:
    1,914
    Спасибо за идею. Норм задача.
     
  19. CmauJluk

    CmauJluk Client

    Joined:
    Dec 25, 2017
    Messages:
    176
    Likes Received:
    20
  20. Neval

    Neval Client

    Joined:
    Jul 22, 2015
    Messages:
    21
    Likes Received:
    48
    Скиньте список сайтов, хотя бы часть, посмотрю в чём может быть дело.
     
  21. CmauJluk

    CmauJluk Client

    Joined:
    Dec 25, 2017
    Messages:
    176
    Likes Received:
    20
    Я пробовал https://2gis.ru/ и леди майл
     
  22. Neval

    Neval Client

    Joined:
    Jul 22, 2015
    Messages:
    21
    Likes Received:
    48
    С lady. mail. ru шаблон собрал 10 почт. Cайты нужно указывать без https:// и http:// иначе будет собирать только с главных страниц почты, заметил такое ограничение сейчас.
    Но я так понял Вы хотели собрать почты с компаний которые есть на сайте 2гис, если так, то этот шаблон не для этого, нужно конкретно для 2 гис. Мой же шаблон собирает почты с главной страницы сайта и со страницы Контакты.
     
  23. CmauJluk

    CmauJluk Client

    Joined:
    Dec 25, 2017
    Messages:
    176
    Likes Received:
    20
    Понял спасибо
     
  24. Quant

    Quant Новичок

    Joined:
    Dec 13, 2016
    Messages:
    6
    Likes Received:
    0
    Отличный шаб!
    Подскажите что нужно добавить (и к какой строке :-)) чтобы в файл записывались не только почты, но и сайт с которого почта взята (или даже страница)
    Например:
    site.ru;[email protected]
     
  25. An_To_Ha

    An_To_Ha Client

    Joined:
    Sep 27, 2010
    Messages:
    18
    Likes Received:
    3
    Что то у меня ошибки во втором кубике показывает(
    [​IMG]

    В логе пишет:


    [​IMG]

    Как это победить, подскажите
     
    Last edited: Jul 11, 2018
  26. Neval

    Neval Client

    Joined:
    Jul 22, 2015
    Messages:
    21
    Likes Received:
    48
    В третьем кубике можно заменить 20-ю строчку на project.Lists["Emails"].Add(project.Variables["Url"].Value + ";" + email);
     
    auva and Quant like this.
  27. Neval

    Neval Client

    Joined:
    Jul 22, 2015
    Messages:
    21
    Likes Received:
    48
    Затрудняюсь ответить в чём причина
     
  28. Vanshap

    Vanshap Новичок

    Joined:
    Jul 24, 2018
    Messages:
    4
    Likes Received:
    0
    Друзья, такой вопрос, как мне запустить данный парсер?
    Я человек далекий от программирования, но как менеджеру мне это интересно!
     
  29. Neval

    Neval Client

    Joined:
    Jul 22, 2015
    Messages:
    21
    Likes Received:
    48
    Нужна программа ZennoPoster (хотя бы демо версия). скачать шаблон из данной темы и запустить его в программе.
    Более подробно о запуске шаблона можно прочитать в справке https://zennolab.com/wiki/ru:project-execution
    шаблоном идут текстовые файлы:
    • BadSite - список сайтов с которых почты не были собраны
    • Emails - собранные почты
    • Website - ссылки на сайты
    • Contacts - список с окончаниями ссылок страниц "Контакты". Вы можете как добавить туда свои окончания так и удалить их
    Закидываем ссылки в файл Website, запускаем шаблон и по окончании работы получаем готовый список почт.
     
  30. Vanshap

    Vanshap Новичок

    Joined:
    Jul 24, 2018
    Messages:
    4
    Likes Received:
    0
    Спасибо большое, а как с Вами можно связаться? Нужно сделать программу для парсинга
     

Пользователи просматривающие тему (Пользователей: 1, Гостей: 1)

  1. ivanows