Если у меня есть коллекция случайных веб-сайтов, как мне получить конкретную информацию от каждого?

#html #architecture #web-scraping #web-crawler

#HTML #архитектура #очистка веб-страниц #веб-сканер

Вопрос:

Допустим, у меня есть коллекция веб-сайтов для бухгалтеров, например:

 http://www.johnvanderlyn.com
http://www.rubinassociatespa.com
http://www.taxestaxestaxes.com
http://janus-curran.com
http://ricksarassociates.com
http://www.condoaudits.com
http://www.krco-cpa.com
http://ci.boca-raton.fl.us
  

Что я хочу сделать, это просканировать каждый и получить имена и электронные письма партнеров. Как мне подойти к этой проблеме на высоком уровне?

Предположим, я знаю, как на самом деле сканировать каждый сайт (и все подстраницы) и анализировать элементы HTML — я использую Oga.

С чем я борюсь, так это с тем, как разобраться в данных, представленных самыми разными способами. Например, адрес электронной почты фирмы (и / или партнера) можно найти одним из следующих способов:

  • На странице «О нас» под именем партнера.
  • На странице «О нас» в виде общего общего электронного письма.
  • На странице команды под именем партнера.
  • На странице «Свяжитесь с нами» в виде общего общего электронного письма.
  • На странице партнера под именем партнера.

Или это может быть любым другим способом.

Один из способов, которым я думал о том, чтобы обратиться к электронной почте, — это просто поиск по всем mailto a тегам и фильтрация оттуда.

Очевидным недостатком этого является то, что нет гарантии, что электронное письмо будет адресовано партнеру, а не какому-либо другому сотруднику.

Еще одна проблема, которая более очевидна, — это определение имен партнеров только из разметки. Сначала я думал, что могу просто извлечь все теги заголовков и текст в них, но я наткнулся на несколько сайтов, на которых в span тегах указаны имена партнеров.

Я знаю, что SO обычно используется для конкретных вопросов программирования, но я не уверен, как подойти к этому и где спросить об этом. Есть ли другой сайт StackExchange, для которого этот вопрос более подходит?

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

Комментарии:

1. Какую ОС вы используете?

2. @norcaljohnny OS X.

Ответ №1:

Я посмотрел на http://ricksarassociates.com / веб-сайт, и я вообще не могу найти никаких партнеров, так что, на мой взгляд, вам лучше выиграть от этого, если нет, вам лучше поискать какое-нибудь другое изобретение.

Я время от времени выполнял аналогичную обработку данных, и в Норвегии у нас есть законы — или я должен сказать «законы» — что вам не разрешено отправлять электронные письма людям, однако вам разрешено отправлять электронные письма компании — так что в некотором смысле та же проблема с другой стороны.

Хотел бы я знать математику и алгоритмы наизусть, потому что я уверен, что в ИИ и машинном обучении скрыто увлекательное решение, но, на мой взгляд, единственное решение, которое я вижу, — это создание набора правил, который со временем, вероятно, становится довольно сложным. Maby, вы могли бы применить некоторую байесовскую фильтрацию — это очень хорошо работает для электронной почты.

Но — чтобы быть немного более продуктивным здесь. Одна вещь, которую я знаю, важна, вы могли бы начать с создания среды поиска и создания набора данных. Имейте базу данных для URL-адресов, чтобы вы могли добавить больше в любое время, и начните сканирование того, что у вас уже есть, чтобы вы проводили тестирование, запрашивая свои собственные данные со 100% копией. Это сэкономит вам огромное время вместо того, чтобы выполнять оперативную очистку при настройке.

Несколько лет назад я создал свою собственную поисковую систему, очистив все домены NO, однако на тот раз мне нужен был только индексный файл. Потребовалось больше недели, чтобы просто очистить его, и я думаю, что это было 8 ГБ данных только для этого одного файла, и мне пришлось использовать несколько прокси-серверов, чтобы заставить его работать из-за проблем с большим трафиком DNS. Множество проблем, о которых нужно было позаботиться. Я думаю, я только говорю — если вы сканируете большие объемы, вы также можете начать получать данные, если хотите эффективно работать с синтаксическим анализом позже.

Удачи, и опубликуйте, если получите решение. Я не думаю, что это возможно без алгоритма или искусственного интеллекта, хотя люди разрабатывают веб-сайты так, как им нравится, и они вытаскивают шаблоны из своей задницы, поэтому нет никаких правил, которым нужно следовать. В итоге вы получите неверные данные.

У вас есть финансирование для этого? Если это так, то проще. Тогда вы могли бы просто сканировать каждый сайт и создавать профиль для каждого сайта. Вы могли бы нанять кого-нибудь дешевого, чтобы вручную просмотреть проанализированные данные и удалить все ошибки. Вероятно, так поступает большинство людей, если только кто-то уже не сделал этого, и база данных продается / доступна через webservice, чтобы ее можно было очистить.

Комментарии:

1. Я понимаю вашу точку зрения, что это сложно, и я действительно думал об изучении некоторого машинного обучения, чтобы применить его здесь — я подозреваю, что здесь может быть приложение для этого. Мне не нужно очищать все домены или делать что-то такое тяжелое, как ваш проект поисковой системы. Все, что я хочу сделать, это найти имена сотрудников, которые работают в каждой фирме / веб-сайте. Нет финансирования. Это всего лишь проект, над которым я сейчас работаю, поэтому ресурсы довольно ограничены, как вы можете оценить.

2.AI и машинное обучение — это путь, я начал много изучать его. Вот несколько исследований YouTube для вас, машинное обучение в P5 в браузере. Второй пример till будет обновляться с помощью реального AI. Дэниел Шиффман: youtube.com/watch?v=bGz7mv2vD6g youtube.com/watch ?v = hacZU523FyM Теперь Sirajology’s будет создавать игрового бота с искусственным интеллектом, чтобы научиться играть в эту игру наиболее эффективно, также на youtube, но еще не там! Обновите его, когда начнете — мы могли бы сотрудничать, поскольку я сам заинтересован в том же, над чем вы работаете здесь! ким из steinhaug dot com

Ответ №2:

Ссылки, которые вы предоставляете, в основном на сайты США, поэтому, я думаю, вы сосредоточены на английских названиях. В этом случае вместо синтаксического анализа из html-тегов я бы просто искал название по всей веб-странице. (Есть бесплатная база данных имени и фамилии) Это также может сработать, если вы делаете это для какой-либо другой европейской компании, но это будет проблемой для компаний из некоторых стран. Возьмем китайский в качестве примера, хотя существует фиксированный набор фамилии, в качестве имени можно использовать практически любую комбинацию китайских символов, поэтому это решение не будет работать для китайского сайта.

Легко найти электронную почту с веб-страницы, поскольку существует фиксированный формат (имя пользователя) @ (имя домена) без пробелов между ними. Опять же, я не буду рассматривать это как html-теги, а просто как обычную строку, чтобы электронное письмо можно было найти независимо от того, находится оно в теге mailto или в виде обычного текста. Затем, чтобы определить, что это за электронная почта:

 Only one email in page?
    Yes -> catch-all email.
    No -> Is name found in that page as well?
        No -> catch-all email (can have more than one catch-all email, maybe for different purpose like info   employment)
        Yes ->  Email should be attached to the name found right before it. It is normal that the name should appear before the email.
                Then, it should be safe to assume the name appear first belongs to more important member, e.g. Chairman or partner.
  

Комментарии:

1. Это интересный подход. Проблема со сравнением слов с бесплатной версией базы данных заключается в том, что я всегда должен хранить словарь имен в памяти, когда я выполняю сравнение / поиск на каждой странице, нет? Это кажется тяжелым с вычислительной точки зрения. Я искал более элегантный подход. Re: поиск электронной почты, да, я могу просто использовать регулярное выражение для формата электронной почты. Спасибо за предложение, хотя!

2. Вместо хранения в памяти я бы предложил использовать для этого реальную систему баз данных. (Я бы предложил Redis для этого случая) Еще одна хорошая особенность английского языка в том, что у вас есть пространство для разделения слов, поэтому вы можете просто определить пробел и передать слово для запроса. У вас даже нет свободного места, если вы ищете китайский или японский сайт.

3. и вы можете пропустить текст в html-тегах, если у вас уже есть синтаксический анализ html

Ответ №3:

Я делал аналогичную очистку для этих типов страниц, и она сильно варьируется от сайта к сайту. Если вы пытаетесь заставить один поисковый робот автоматически находить информацию, это будет сложно. Однако высокий уровень выглядит примерно так.

  • Для каждого проверяемого сайта ищите шаблоны элементов. У Divs часто будут метки, идентификаторы и классы, которые легко позволят вам получить информацию. Возможно, вы обнаружите, что многие divs будут иметь определенное имя класса. Сначала проверьте это.
  • Часто бывает лучше захватить слишком много данных с определенной страницы, а затем перенести их на свою сторону. Возможно, вы могли бы искать информацию, которая появляется на экране, используя тип (ссылка) или регулярное выражение (электронная почта) для поиска форматированного текста. Имена и род занятий будет сложнее найти этим методом, но на многих страницах они могут быть связаны позиционно с другими хорошо отформатированными элементами.
  • Имена часто будут сопровождаться почетными именами (миссис, мистер, доктор, Джей Ди, доктор медицинских наук и т. Д.) Вы могли бы создать банк из них и свериться с ними для любой страницы, на которой вы оказались.
  • Наконец, если вы действительно хотите сделать этот процесс универсальным, вы могли бы использовать некоторые эвристические методы для улучшения своих методов на основе ожидаемой информации; имена, например, чаще всего находятся в определенном списке. Если бы это стоило вашего времени, вы могли бы проверить определенный текст на соответствие списку более распространенных имен.

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

Комментарии:

1. Я подумал обо всех этих вариантах. Очевидная проблема с 1-й точкой заключается в том, что нет шаблонов элементов. Некоторые люди помещают имена в теги заголовков, другие помещают их в теги span, а другие помещают их в изображения. Так что это действительно довольно случайно. Локальная сортировка по куче данных совсем не идеальна. Самое большее, что я хотел бы отсортировать, это просто текст. Идея с почетными званиями на самом деле довольно хороша, но здесь бесполезна. У большинства партнеров нет почетных званий. Гарантии нет. Сопоставление списка общих имен, похоже, является повторяющейся темой. Возможно, мне придется изучить это еще немного.

Ответ №4:

На этих веб-страницах есть отличные сообщения на эту тему с множеством полезных ссылок:

https://www.quora.com/What-is-a-good-web-scraper-for-pulling-emails-names-etc-even-if-the-contact-info-is-another-page-deep-a-browser-add-on-is-a-plus

http://www.hongkiat.com/blog/web-scraping-tools/

http://www.garethjames.net/a-guide-to-web-scraping-tools/

http://www.butleranalytics.com/15-web-scraping-tools/

Некоторые из рассмотренных приложений работают macOSв.

введите описание изображения здесь

Комментарии:

1. Спасибо за это. Действительно, есть много обсуждений и полезных ссылок. Мне потребуется некоторое время, чтобы переварить это.