• Web crawler с использованием Python и Chrome

    Добрый день, дорогие друзья.

    Недавно, сидя на диване, я задумался о том, что хочется мне сделать своего паука, который что-то бы смог качать с веб сайтов. Но качать он должен был бы не простой загрузкой, а как настоящий милый добрый браузер (т.е. JavaScript чтобы исполнялся).

    В моей голове всплыли такие интересные штуки, как Selenium, PhantomJS, Splash и всякое подобное. Все эти штуки были мне немного втягость. Вот какие причины я выявил:

    • Дело в том, что я хотел бы писать на своем любимом питоне, потому что очень не люблю JavaScript, а это уже означает, что большая часть уже не работала бы (или пришлось их как-то склеивать, что тоже отстой).
    • Еще эти безголовые браузеры обновляются как когда.
    • Но вот Selenium очень милая штука, но я не нашел, как там отслеживать загрузку страниц, или хотя бы адекватного способа выдрать куку или задать её. Слышал, что многие любители селениума инжектят в страничку JavaScript, что для меня дико, потому что где-то полгода назад я делал сайтик, который отрывал любые JavaScript вызовы с сайта и потенциально мог определять моего паука. Мне бы очень не хотелось таких казусов. Хочется чтобы мой паук выглядел как браузер максимально точно.

    Читать дальше →
  • Методы работы с «тяжёлыми» XML

      image

      На работе попросили провести исследование какими средствами лучше разбирать объёмный XML файл (более 100Mb). Предлагаю сообществу ознакомиться с результатами.

      Рассмотрим основные методы работы с XML:

      1. Simple XML (documentation)
      2. DOM (documentation)
      3. xml_parser (SAX) (documentation)
      4. XMLReader (documentation)
      Читать дальше →
    • Путешествие внутрь Avito: платформа

        image

        Мы уже рассказали вам о хранилище Avito, картинках, медиапикере, но главный вопрос так и оставался нераскрытым: какая она, архитектура платформы, из каких компонентов состоит и какой стек использует. Вы просили рассказать об аппаратной составляющей Avito, используемой системе виртуализации, СХД и так далее — ну что же, отвечаем.
        Читать дальше →
      • На 100% правильный способ проверки адресов электронной почты

        • Translation
        Поздравляю. C сегодняшнего дня вы никогда не будете тратить время, подбирая самое оптимальное регулярное выражение для проверки адреса электронной почты. И вы никогда больше не отклоните адрес, который к вашему удивлению оказался действительным.

        Хитрость в том, чтобы сразу определить значение слова «действительный».

        Мы разработчики — технические ребята, так что наиболее логичным будет проверить на соответствие официальным критериям. Вот некоторые примеры валидных адресов email, которые соответствуют критериям.


        en.wikipedia.org/wiki/Email_address#Valid_email_addresses

        Но я отправлю к чёрту логичный способ, так что...
      • Парсим weblancer используя PROXY

          Цель работы


          1. Парсим сайт, используя прокси-сервера.
          2. Сохраняем данные в формате CSV.
          3. Пишем поисковик по найденным данным.
          4. Строим интерфейс.




          Использовать будем язык программирования Python. Сайт, с которого мы будем качать данные — www.weblancer.net (парсинг старой версии этого сайта был размещен здесь), в нем есть предложения работы по адресу www.weblancer.net/jobs. С него мы и будем получать данные — это название, цена, количество заявок, категория, краткое описание предлагаемой работы.

          Вход с использованием прокси означает — вход на сайт под ненастоящим адресом. Пригодится для парсинга сайта с защитой бана по IP адресу (то есть, если вы слишком часто, за короткий отрезок времени, входите на сайт).
          Читать дальше →
          • +2
          • 10.8k
          • 7
        • Реализация на Python многопоточной обработки данных для парсинга сайтов

            Процесс парсинга усложняется существенными затратами времени на обработку данных. Многопоточность поможет в разы увеличить скорость обработки данных. Сайт для парсинга — «Справочник купюр мира», где получим валюту в соотношении к иным.
            Читать дальше →
          • Парсинг резюме

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

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

              Живой пример (кусок XML результата анализа резюме от одного из лидеров области Sovren):

                  <EmployerOrg>
                      <EmployerOrgName>ООО Звезда-DSME</EmployerOrgName>
                      <PositionHistory positionType="directHire">
                          <Title>Ведущий специалист отдела развития информационных систем</Title>
                          <OrgName>
                              <OrganizationName>ООО Звезда-DSME</OrganizationName>
                           </OrgName>
              

              Парсер Sovren прекрасно справился с выделением полей. Ребята не зря занимаются этим делом без малого 20 лет!

              Но что дальше делать с «Ведущий специалист отдела развития информационных систем»? Как понять, что же это за должность, насколько опыт работы этого человека релевантен для той или иной вакансии?
              Читать дальше →
              • +13
              • 15.5k
              • 7
            • Скрапинг бесконечно прокручивающейся страницы

              • Translation

              Скрапинг бесконечно прокручивающейся страницы


              Добро пожаловать в советы по Scrapy от профессионалов! В этом месяце мы поделимся несколькими уловками, чтобы помочь ускорить вашу работу связанную с веб-скрапингом. Как ведущие мэйнтейнеры Scrapy мы сталкиваемся с каждыми препятствием, которое вы можете себе представить. Так что не волнуйтесь — вы в надёжных руках. Не стесняйтесь контактировать с нами в твиттере или фейсбуке с любыми предложениями для будущих статей.



              В эру одностраничных приложений и тонн AJAX-запросов на одной странице множество веб-сайтов заменили кнопку навигации "вперёд/назад" на причудливый механизм бесконечной прокрутки страницы. Веб-сайты использующие этот механизм загружают новую сущность каждый раз, когда пользователь достигает конца страницы при вертикальной прокрутке(вспомните Twitter, Facebook, Google Images). Даже несмотря на то, что UX-эксперты утверждают что механизм бесконечной прокрутки предоставляет чрезмерное количество данных для пользователей, мы видим увеличивающееся количество веб-страниц прибегающих к предоставлению бесконечного списка результатов.

              Читать дальше →
              • +4
              • 14.8k
              • 2
            • YML (Yandex Market Language) — Генерация файла товаров для Яндекс Вебмастер

                Недавно я заметил что в Yandex Webmaster появился новый есть раздел, он называется «Товары и цены». Там я увидел как можно бесплатно улучшить в выдаче яндекса, страницы товаров магазина.

                yandex

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

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

                Большинство из нас, впервые столкнувшись с данной проблемой, начинают забивать в поисковых системах что-то типа: «regexp online generator» и к своему великому сожалению осознают что гугл сломался все результаты в поиске являются сервисами для проверки корректности уже составленного регулярного выражения (или я плохо гуглил).

                А как же составить это самое регулярное выражение?


                image

                До недавнего времени существовало 2 ответа на этот вопрос:

                1. Изучить документацию по регулярным выражениям и составить регулярку самому
                2. Попросить кого-то более опытного сделать это за вас

                Теперь, после нескольких месяцев разработки, рад представить и 3-й ответ:

                » Генератор регулярных выражений

                История


                Давным давно, в одном проекте пришел довольно интересный и сложный запрос от внутренних пользователей. Персоналу технической поддержки нужно было самим задавать правила валидации для определенных полей, разным пользователям. Правила должны были часто и очень оперативно изменяться.
                Читать дальше →
              • Web scraping при помощи Node.js

                  Это первая статья в цикле про создание и использование скриптов для веб-скрейпинга при помощи Node.js.


                  1. Web scraping при помощи Node.js
                  2. Web scraping на Node.js и проблемные сайты
                  3. Web scraping на Node.js и защита от ботов
                  4. Web scraping обновляющихся данных при помощи Node.js

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


                  Обычно, задача для веб-скрейпинга выглядит так: есть данные, доступные только на веб-страницах, и их надо оттуда вытащить и сохранить в неком удобоваримом формате. Конечный формат не важен, так как конвертеры никто не отменял. По большей части речь о том, чтобы открыть браузер, пройтись мышкой по ссылкам и скопипейстить со страниц нужные данные. Ну, или сделать то же самое скриптом.


                  Цель этой статьи – показать весь процесс создания и использования такого скрипта от постановки задачи и до получения конечного результата. В качестве примера я рассмотрю реальную задачу вроде тех, какие часто можно найти, например, на биржах фриланса, ну, а в качестве инструмента для веб-скрейпинга будем использовать Node.js.

                  Читать дальше →
                • Алгоритм решения кроссвордов из регулярных выражений

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


                  image


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

                  Читать дальше →
                  • +17
                  • 6.1k
                  • 4
                • Как парсить интернет по-гусиному

                    “Распарсить сайт” — словосочетание, которое повергало меня в уныние всего полгода назад. В моей голове сразу же проносились знакомые проблемы с настройкой фантома, или возней с селениумом. Мысли о возможной необходимости подменять useragent, пагинации и других действиях во время парсинга заставляли откладывать эту задачу в долгий ящик…

                    Но всё изменилось, когда я встретил Гуся. Мир парсинга заиграл новыми красками. Под катом я хочу показать несколько простых примеров, которые могут помочь распарсить непростые сайты.

                    Кстати, написав парсер, Гусь решил снять фильм про это, пока что вы можете насладиться трейлером:



                    Читать дальше →
                  • Парсер OOXML (docx, xlsx, pptx) на Ruby: наши ошибки и находки

                      Мы выложили парсер OOXML форматов на Ruby в open-source. Он доступен на GitHub'е и RubyGems.org, бесплатен и распространяется под лицензией AGPLv3. Всё как у модненьких Ruby-разработчиков.


                      Читать дальше →
                    • Web scraping обновляющихся данных при помощи Node.js и PaaS

                        Это уже четвёртая статья в цикле про веб-скрейпинг при помощи Node.js:


                        1. Web scraping при помощи Node.js
                        2. Web scraping на Node.js и проблемные сайты
                        3. Web scraping на Node.js и защита от ботов
                        4. Web scraping обновляющихся данных при помощи Node.js

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


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


                        Цель статьи – показать весь процесс создания, развёртывания и использования скрипта от постановки задачи и до получения конечного результата. Как обычно, для примера используется реальная задача, какие часто встречаются на биржах фриланса.

                        Читать дальше →
                        • +9
                        • 13.3k
                        • 4
                      • Небольшой скрипт для отслеживания цен avito из Google Spreadsheet

                        • Tutorial
                        Хочу поделиться с сообществом небольшим скриптом для загрузки цен с сайта объявлений AVITO в Google Spreadsheet. Вдруг кому-нибудь еще пригодится.

                        Логика такая — в цикле бежим по ячейкам таблицы с адресами и запрашиваем странички. Из полученных страниц получаем цену и подставляем в соседние ячейки. Запуск скрипта через пункт меню Avito -> Update Prices.

                        Page Sample
                        (наименнннование sic!)
                        Читать дальше →
                      • Как мы боролись с парсерами

                          image
                          Ключевые моменты:
                          * Реализация скрипта для проверки PTR посетителей;
                          * Конфигурирование nginx в IfIsEvil-style с ветвлениями map;
                          * Имена location в переменных map;
                          * Управление ветвлением через try_files /nonexist $map_var.

                          Многие высоконагруженные и популярные сайты страдают от того, что кроме живых посетителей их посещают разнообразные парсеры, боты и прочие автоматические сканеры, которые не несут никакого полезного эффекта, а только создают паразитный трафик и нагрузку на, и без того, нагруженную систему. В данном случае я не имею виду поисковых ботов, которые хоть и зачастую нагружают проект не нормировано, но просто необходимы любому проекту.
                          Один из наших клиентов регулярно испытывал проблему лавинообразного роста нагрузки в определенное время суток. Периодически, раз в сутки и чаще происходили наплывы посещений со значительным ростом LA на серверах. Было принято решение построить защиту от паразитного трафика.

                          Читать дальше →
                        • Web Scraping с помощью python

                            Введение


                            Недавно заглянув на КиноПоиск, я обнаружила, что за долгие годы успела оставить более 1000 оценок и подумала, что было бы интересно поисследовать эти данные подробнее: менялись ли мои вкусы в кино с течением времени? есть ли годовая/недельная сезонность в активности? коррелируют ли мои оценки с рейтингом КиноПоиска, IMDb или кинокритиков?
                            Но прежде чем анализировать и строить красивые графики, нужно получить данные. К сожалению, многие сервисы (и КиноПоиск не исключение) не имеют публичного API, так что, приходится засучить рукава и парсить html-страницы. Именно о том, как скачать и распарсить web-cайт, я и хочу рассказать в этой статье.
                            В первую очередь статья предназначена для тех, кто всегда хотел разобраться с Web Scrapping, но не доходили руки или не знал с чего начать.

                            Off-topic: к слову, Новый Кинопоиск под капотом использует запросы, которые возвращают данные об оценках в виде JSON, так что, задача могла быть решена и другим путем.
                            Читать дальше →
                          • URI — сложно о простом (Часть 1)

                              image

                              Привет хабр!

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

                              "Пфф, ссылки они и в Африке ссылки, чего тут разбираться?" — скажете вы, тогда я задам вопрос:

                              Что есть что и куда нас приведет?
                              • http://example.com
                              • www.example.com
                              • //www.example.com
                              • mailto:user@example.com

                              Если вы не знаете однозначного ответа или вам просто интересно и если вы не боитесь огромного количества трехбуквенных аббревиатур — милости прошу под кат.
                              Читать дальше →
                            • Кодировки и веб-страницы

                              Возвращаясь к избитой проблеме с кодировками русских букв, хотелось бы иметь под рукой некий единый справочник или руководство, в котором можно найти решения различных сходных ситуаций. В своё время сам перелопатил множество статей и публикаций, чтобы находить причины ошибок. Задача этой публикации — сэкономить время и нервы читателя и собрать воедино различные причины ошибок с кодировками в разработке на Java и JSP и способы их устранения.

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

                              Итак, поехали.
                              Читать дальше →