Скрапинг веб-сайтов с помощью Python: сбор данных из современного интернета
Покупка
Тематика:
Web-технологии. Web-дизайн
Издательство:
ДМК Пресс
Автор:
Митчелл Райан
Перевод:
Груздев А. В.
Год издания: 2016
Кол-во страниц: 280
Дополнительно
Вид издания:
Практическое пособие
Уровень образования:
ВО - Бакалавриат
ISBN: 978-5-97060-223-2
Артикул: 712427.02.99
Доступ онлайн
В корзину
Изучите методы скрапинга и краулинга веб-сайтов, чтобы получить доступ к неограниченному объему данных в любом уголке Интернета в любом формате. С помощью этого практического руководства вы узнаете, как использовать скрипты Python и веб-API, чтобы одновременно собрать и обработать данные с тысяч или даже миллионов веб-страниц.
Идеально подходящая для программистов, специалистов по безопасности и веб-администраторов, знакомых с языком Python, эта книга знакомит не только с основными принципами работы веб-скраперов, но и углубляется в более сложные темы, такие как анализ сырых данных или использование скраперов для тестирования интерфейса веб-сайта Примеры программного кода, приведенные в книге, помогут разобраться в этих принципах на практике.
- Полная коллекция по информатике и вычислительной технике
- Web-технологии. Web-дизайн
- Аналитика данных
- Интермедиатор. Информационная безопасность (сводная)
- Интермедиатор. Информационные системы и технологии (сводная)
- Интермедиатор. ИТ-технологии для профессионалов (сводная)
- Интермедиатор. Обеспечение безопасности (сводная)
- Программирование на Python
Тематика:
ББК:
УДК:
ОКСО:
- ВО - Бакалавриат
- 09.03.01: Информатика и вычислительная техника
- 09.03.02: Информационные системы и технологии
- 09.03.03: Прикладная информатика
- 10.03.01: Информационная безопасность
- ВО - Специалитет
- 10.05.01: Компьютерная безопасность
ГРНТИ:
Скопировать запись
Фрагмент текстового слоя документа размещен для индексирующих роботов.
Для полноценной работы с документом, пожалуйста, перейдите в
ридер.
Райан Митчелл Скрапинг веб-сайтов с помощью Python СБОР ДАННЫХ ИЗ СОВРЕМЕННОГО ИНТЕРНЕТА
Ryan Mitchell Web Scraping with Python COLLECTING DATA FROM THE MODERN WEB Beijing · Boston · Farnham · Sebastopol · Tokyo
Райан Митчелл Скрапинг веб-сайтов с помощью Python СБОР ДАННЫХ ИЗ СОВРЕМЕННОГО ИНТЕРНЕТА Москва, 2016
УДК 004.738.1 :004.738.52Python ББК 32.971.353 М66 Митчелл Р. М66 Скрапинг веб-сайтов с помощю Python / пер. с англ. А. В. Груз- дев. – М.: ДМК Пресс, 2016. – 280 с.: ил. ISBN 978-5-97060-223-2 Изучите методы скрапинга и краулинга веб-сайтов, чтобы получить доступ к неограниченному объему данных в любом уголке Интернета в любом форма- те. С помощью этого практического руководства вы узнаете, как использовать скрипты Python и веб-API, чтобы одновременно собрать и обработать данные с тысяч или даже миллионов веб-страниц. Идеально подходящая для программистов, специалистов по безопасности и веб-администраторов, знакомых с языком Python, эта книга знакомит не толь- ко с основными принципами работы веб-скраперов, но и углубляется в более сложные темы, такие как анализ сырых данных или использование скраперов для тестирования интерфейса веб-сайта. Примеры программного кода, приведенные в книге, помогут разобраться в этих принципах на практике. УДК 004.738.1 :004.738.52Python ББК 32.971.353 Authorized Russian translation of the English edition of Web Scraping with Python, ISBN 9781491910290 © 2015 Ryan Mitchell This translation is published and sold by permission of O’Reilly Media, Inc., which owns or controls all rights to publish and sell the same. Все права защищены. Любая часть этой книги не может быть воспроиз- ведена в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Материал, изложенный в данной книге, многократно проверен. Но по- скольку вероятность технических ошибок все равно существует, издательство не может гарантировать абсолютную точность и правильность приводимых сведений. В связи с этим издательство не несет ответственности за возможные ошибки, связанные с использованием книги. ISBN 978-1-491-91029-0 (анг.) © 2015 Ryan Mitchell ISBN 978-5-97060-223-2 (рус.) © Оформление, перевод, ДМК Пресс, 2016
Содержание Предисловие ...................................................................................10 Вступление ......................................................................................13 ЧАСТЬ I. ПОСТРОЕНИЕ СКРАПЕРОВ ...........................................20 Глава 1. Ваш первый скрапер ......................................................21 Соединение с Интернетом ...............................................................................21 Введение в BeautifulSoup .................................................................................24 Установка BeautifulSoup ..............................................................................24 Запуск BeautifulSoup ....................................................................................26 Как обеспечить надежный скрапинг .......................................................28 Глава 2. Продвинутый парсинг HTML .........................................31 Вам не всегда нужен молоток .........................................................................31 Еще одно применение BeautifulSoup ...........................................................32 find() и findAll() ..............................................................................................34 Другие объекты BeautifulSoup ..................................................................36 Навигация по дереву синтаксического разбора ..................................37 Работа с дочерними элементами и элементами-потомками ...........38 Работа с одноуровневыми элементами ..................................................39 Работа с родительскими элементами ......................................................40 Регулярные выражения ....................................................................................41 Регулярные выражения и BeautifulSoup ....................................................46 Работа с атрибутами ...........................................................................................47 Лямбда-выражения ............................................................................................48 За рамками BeautifulSoup ................................................................................48 Глава 3. Запуск краулера ...............................................................50 Обход отдельного домена .................................................................................50 Краулинг всего сайта .........................................................................................54 Сбор данных по всему сайту ...........................................................................57 Краулинг Интернета ..........................................................................................59 Краулинг с помощью Scrapy ...........................................................................65 Глава 4. Использование API..........................................................70 Как работают API ................................................................................................71 Общепринятые соглашения ............................................................................72 Методы...............................................................................................................72
Содержание Аутентификация .............................................................................................73 Ответы ....................................................................................................................74 Вызовы API ......................................................................................................75 Echo Nest ................................................................................................................76 Несколько примеров .....................................................................................76 Twitter ......................................................................................................................78 Приступаем к работе .....................................................................................78 Несколько примеров .....................................................................................79 Google API .............................................................................................................83 Приступаем к работе .....................................................................................83 Несколько примеров .....................................................................................84 Парсинг JSON-данных ......................................................................................86 Возвращаем все это домой ...............................................................................88 Подробнее о применении API ........................................................................92 Глава 5. Хранение данных ............................................................94 Медиафайлы .........................................................................................................94 Сохранение данных в формате CSV .............................................................97 MySQL ....................................................................................................................99 Установка MySQL ....................................................................................... 100 Некоторые основные команды ............................................................... 102 Интеграция с Python ................................................................................. 106 Методы работы с базами данных и эффективная практика ........ 109 «Шесть шагов» в MySQL ......................................................................... 112 Электронная почта .......................................................................................... 115 Глава 6. Чтение документов .......................................................117 Кодировка документа ..................................................................................... 117 Текст ...................................................................................................................... 118 Кодировка текста и глобальный Интернет ........................................ 119 CSV ....................................................................................................................... 124 Чтение CSV-файлов ................................................................................... 124 PDF ....................................................................................................................... 126 Microsoft Word и .docx .................................................................................... 128 ЧАСТЬ II. ПРОДВИНУТЫЙ СКРАПИНГ ....................................132 Глава 7. Очистка данных .............................................................133 Очистка данных на этапе создания кода .................................................. 133 Нормализация данных .............................................................................. 136
Содержание 7 Очистка данных постфактум ....................................................................... 138 OpenRefine ..................................................................................................... 139 Глава 8. Чтение и запись естественных языков .....................144 Аннотирование данных .................................................................................. 145 Марковские модели ......................................................................................... 148 Шесть шагов Википедии: заключительная часть ............................ 152 Natural Language Toolkit ................................................................................ 156 Установка и настройка .............................................................................. 156 Статистический анализ с помощью NLTK ........................................ 156 Лексикографический анализ с помощью NLTK .............................. 160 Дополнительные ресурсы ............................................................................. 163 Глава 9. Краулинг сайтов, использующих веб-формы ..........165 Библиотека requests ........................................................................................ 165 Отправка простой формы ............................................................................. 166 Радиокнопки, флажки и другие элементы ввода данных .................. 168 Отправка файлов и изображений ............................................................... 170 Работа с логинами и cookies ......................................................................... 171 Базовая HTTP-аутентификация ........................................................... 173 Другие проблемы при работе с формами ................................................ 174 Глава 10. Скрапинг JavaScript-кода ...........................................175 Краткое введение в JavaScript ..................................................................... 176 Распространенные библиотеки JavaScript ......................................... 177 Ajax и динамический HTML ........................................................................ 180 Выполнение JavaScript в Python с помощью библиотеки Selenium .......................................................................................................... 181 Обработка редиректов .................................................................................... 186 Глава 11. Обработка изображений и распознавание текста ..............................................................................................189 Обзор библиотек .............................................................................................. 190 Pillow ............................................................................................................... 190 Tesseract .......................................................................................................... 191 NumPy ............................................................................................................. 192 Обработка хорошо отформатированного текста................................... 193 Скрапинг текста с изображений, размещенных на веб-сайтах ................................................................................................. 196
Содержание Чтение CAPTCHA и обучение Tesseract ................................................. 198 Обучение Теsseract...................................................................................... 200 Извлечение CAPTCHA и отправка результатов. распознавания ................................................................................................... 204 Глава 12. Обход ловушек в ходе скрапинга .............................208 Обратите внимание на этический аспект ................................................ 209 Учимся выглядеть как человек .................................................................... 210 Настройте заголовки .................................................................................. 210 Обработка cookies ....................................................................................... 212 Время решает все......................................................................................... 214 Общие функции безопасности, используемые веб-формами .......... 215 Значения полей скрытого ввода ............................................................ 215 Обходим «горшочки с медом» ................................................................ 217 Проверяем скрапер на «человечность» .................................................... 219 Глава 13. Тестирование вашего сайта с помощью скраперов .......................................................................................221 Введение в тестирование ............................................................................... 222 Что такое модульные тесты? ................................................................... 222 Питоновский модуль unittest ...................................................................... 223 Тестирование Википедии ......................................................................... 224 Тестирование с помощью Selenium ............................................................ 227 Взаимодействие с сайтом ......................................................................... 227 Unittest или Selenium? ................................................................................... 231 Глава 14. Скрапинг с помощью удаленных серверов ...........233 Зачем использовать удаленные серверы? ............................................... 233 Как избежать блокировки IP-адреса .................................................... 234 Переносимость и расширяемость .......................................................... 235 Tor .......................................................................................................................... 236 PySocks ........................................................................................................... 237 Удаленный хостинг .......................................................................................... 238 Запуск с аккаунта веб-хостинга ............................................................. 238 Запуск из облака.......................................................................................... 240 Дополнительные ресурсы ............................................................................. 241 Заглянем в будущее ......................................................................................... 242 Приложение А. Кратко о том, как работает Python .................244 Установка и «Hello, World!» ......................................................................... 244
Содержание 9 Приложение В. Кратко о том, как работает Интернет .............248 Приложение С. Правовые и этические аспекты веб-скрапинга ................................................................................252 Товарные знаки, авторские права, патенты, о боже! ............................ 252 Авторское право .......................................................................................... 254 Посягательство на движимое имущество ................................................ 256 Закон о компьютерном мошенничестве и злоупотреблении............ 258 robots.txt и Пользовательское соглашение ............................................. 259 Три нашумевших случая в практике веб-скрапинга .................................................................................................... 263 eBay против Bidder’s Edge и посягательство на движимое имущество ...................................................................................................... 263 США против Орнхаймера и Закон о компьютерном мошенничестве и злоупотреблении ...................................................... 265 Филд против Google: авторское право и robots.txt ..................................................................................................... 268 Об авторе .......................................................................................269 Колофон .........................................................................................270 Предметный указатель ................................................................271
Предисловие В современном цифровом мире данные приобретают все большую и большую ценность. Если мы посмотрим вокруг, то увидим огромное количество различных сервисов, которые пытаются сделать нашу жизнь лучше. Стараются нам помочь, посоветовать, найти нужную информацию. От гигантов типа Google до стартапов и небольших экспериментальных проектов, все эти сервисы работают с данными. В основе любой задачи, которую предстоит сегодня решать машине или человеку, лежат данные. С другой стороны, на недостаток данных в современном мире жа- ловаться не приходиться. Данные с большой скоростью генерируют- ся и накапливаются компаниями и устройствами, объемы хранения растут но, конечно, самым перспективным источником данных явля- ется сеть Интернет. Когда-то Интернет был маленькой американской сетью для не- скольких сотен человек, где почти все друг друга знали. Теперь это ги- гантская информационная структура. Здесь практически невозмож- но контролировать потоки информации. То, что называется «контент, генерируемый пользователями» составляет колоссальный объем данных. Этот объем уже даже невозможно точно измерить. Точно так же как мы когда-то перестали измерять расстояние до звезд в киломе- трах, применяемых на Земле, и стали использовать понятие «свето- вой год», то есть характеристику скорости, также и об интернет-дан- ных теперь пишут в терминах скорости прироста информации, а не ее объема. Так, за одну минуту в Интернете появляются, например, более 3 миллионов новых постов в сети Facebook, более 300 тысяч сообщений в Twitter, более 30 тысяч отзывов о книгах и покупках, не говоря уже об описаниях новых фильмов, товаров и т. д., и т. п. Все это многообразие информации сейчас активно используется не только людьми, но и организациями для повышения эффективности своей деятельности. Жизнь людей сейчас настолько быстро меняется, что традиционных анкетных данных просто недостаточно для оценки поведения заемщика (если это банк), покупателя (если это розничная сеть). В стремительно меняющемся мире они банально устаревают. И тогда нужно обратиться к «внешним» данным. Произвести обога- щение текстовыми данными. Банкам важно анализировать, что поль- зователи пишут в социальных сетях, на сайтах. Оценить их уровень грамотности, словарный запас, тематику публикуемых сообщений. Магазинам, производителям важно собирать отзывы покупателей об
Предисловие 11 их товарах, анализировать их тональность, чтобы лучше спланиро- вать рекламную компанию, использовать в ней текстовые формули- ровки, максимально близкие покупателю. Мы, в своей работе с раз- личными компаниями, видим большое количество таких примеров и перечислять их можно бесконечно. Тем не менее, для того чтобы эффективно работать с этой инфор- мацией, получать из нее пользу и реализовывать задачи, востребован- ные компаниями и людьми, данные нужно извлекать, обрабатывать, структурировать. То, что мы видим как веб-сайт с отзывом о филь- ме, для машины представляется сборищем разных «кусков» данных с непонятным назначением. Человек, взглянув на веб-страницу, сра- зу легко определяет нужный и значимый раздел, но для компьютера понимание того, какой именно текст следует обрабатывать, как отде- лить этот текст от рекламы, ненужных заголовков, ссылок является довольно сложной задачей. По мере роста потока информации, возможностей по применению этой информации в прикладных задачах, развиваются технические подходы, объединяемые общим термином «веб-краулинг» или «веб- скрапинг». Они предназначены для сбора информации из сети Ин- тернет и ее подготовки к автоматизированной обработке. И несмотря на то, что не всегда процесс веб-скрапинга «виден» для конечного пользователя, часто именно он является ключевым моментом совре- менных веб-технологий. Возьмем для примера тот же Google. Все мы пользуемся поиском, все мы восхищаемся качеством и релевантно- стью выдаваемых результатов, но, перед тем как ответить на наши поисковые запросы, сервисы Google проводят огромную работу, они обходят все сайты, скачивают с них страницы, выполняют синтакси- ческий разбор контента, определяют, какой текст на этих страницах является «значимым» и именно его индексируют и выдают пользо- вателю. Разработка и реализация качественных механизмов сбора инфор- мации является залогом успешной ее обработки и в этой книге дается детальное руководство по подходам и методам решения этой задачи с помощью популярного языка программирования Python. Сейчас Python – стремительно развивающийся язык. В первую очередь его популярность связана с простотой и легкостью освоения. Также развитию популярности способствует и то, что он поставляет- ся под открытой лицензией и является свободно распространяемым. Это обеспечивает наличие огромного количества библиотек, расши- рений и готовых компонентов, которые можно свободно использовать
Содержание в своих проектах, что сильно экономит время разработчика. Python – язык с большой и богатой историей. Он появился более 25 лет назад как высокоуровневый язык программирования – альтернатива Java и C++, на котором всего в несколько строчек можно описать то, что на этих низкоуровневых языках программирования занимает по не- сколько блоков кода. Python в первую очередь предназначен для на- писания прикладных приложений, но за годы существования он раз- вился в очень гибкий инструмент, на котором сейчас уже пишутся и очень большие, серьезные и высоконагруженные проекты. Дополнительным преимуществом данной книги является не толь- ко использование Python, но и форма подачи материала. В книге даны не просто примеры кода, весь материал представлен в виде при- меров конкретных и практических задач. Нельзя не отметить и наличие целого учебного сайта, разработан- ного Райан. На его примере наглядно показана отправка форм, работа капчи, скрапинг JavaScript (использование пауз в выполнении скрип- тов) и т. д. Очень приятно, что данная книга выходит в свет на русском языке. Авторы и переводчики проделали огромную и качественную работу. Надеюсь, что распространение знаний и методов, описанных в данной книге, будет направлено разработчиками на создание качественно новых, интеллектуальных сервисов, которые будут приносить пользу людям и организациям в нашей повседневной жизни и, конечно, сде- лают ее немного лучше. Денис Афанасьев, генеральный директор компании «CleverDATA»
Вступление Для новичков программирование может показаться своего рода ма- гией. И если программирование – это магия, то веб-скрапинг (web scraping) является колдовством. Применение магии для решения кон- кретных впечатляющих и важных задач, да еще без всяких усилий, выглядит чудом. В самом деле, когда я работала инженером-программистом, я при- шла к выводу, что существует очень немного направлений в програм- мировании, которые так же, как веб-скрапинг, одинаково привлекают внимание программистов и обычных пользователей. Хотя написать простую программу-робот, которая соберет информацию, отправит ее в терминал или сохранит в базе данных, несложно, все равно испыты- ваешь определенный трепет, ощущение непредсказуемости результа- та, независимо от того, сколько раз ты уже проделывал эту процедуру. Жаль, что когда я разговариваю с другими программистами о веб- скрапинге, возникает много непонимания и путаницы. Некоторые высказывают сомнения по поводу законности веб-скрапинга или спо- рят по поводу способов обработки современного Интернета со всеми его JavaScript, мультимедийным контентом и cookies. Некоторые сме- шивают API c веб-скраперами. Настоящая книга стремится поставить окончательную точку в этих наиболее распространенных вопросах и заблуждениях, сложивших- ся вокруг веб-скрапинга, дает развернутое руководство по решению наиболее востребованных задач веб-скрапинга. Начиная с главы 1, я буду периодически приводить примеры про- граммного кода, чтобы продемонстрировать основные принципы веб- скрапинга. Эти примеры являются общественным достоянием, и их можно свободно использовать (тем не менее соблюдение авторских прав всегда приветствуется). Кроме того, все примеры программного кода будут размещены на веб-сайте для просмотра и скачивания. Что такое веб-скрапинг? Автоматизированный сбор данных из Интернета существует столь- ко же, сколько сам Интернет. Несмотря на то что веб-скрапинг (web scraping) не является новым термином, раньше это направление было больше известно под названием анализ экранных или интерфейсных данных (screen scraping), интеллектуальный анализ данных (data mining), сбор веб-данных (web harvesting). Похоже, что на сегодняшний
Вступление день общее мнение склоняется в пользу термина веб-скрапинг (web scraping), который я и буду использовать на протяжении всей книги, хотя время от времени буду называть программы веб-скрапинга ро- ботами (bots). В теории веб-cкрапинг – это сбор данных с помощью любых средств, кроме программ, использующих API (или человека, исполь- зующего веб-браузер). Чаще всего веб-скрапинг осуществляется с по- мощью программы, которая автоматически запрашивает веб-сервер, запрашивает данные (HTML и другие файлы, которые размещены на веб-страницах), а затем выполняет парсинг этих данных, чтобы из- влечь необходимую информацию. На практике веб-скрапинг охватывает широкий спектр методов и технологий программирования, таких как анализ данных и инфор- мационная безопасность. Эта книга посвящена основам веб-скра- пин га и краулинга (часть I)1 и раскрывает некоторые сложные темы (часть II). Зачем нужен веб-скрапинг? Если для вас единственным способом доступа к Интернету является браузер, вы теряете огромный спектр возможностей. Хотя браузеры удобны для выполнения JavaScript, вывода изображений и представ- ления объектов в более удобочитаемом формате (помимо прочего), веб-скраперы удобны для сбора и обработки больших объемов дан- ных (помимо прочего). Вместо однократного просмотра одной стра- ницы на дисплее монитора вы можете просматривать базы данных, которые уже содержат тысячи или даже миллионы страниц. Кроме того, веб-скраперы могут проникнуть в такие места, куда традиционные поисковые системы проникнуть не могут. Поиск Google по «cheapest flights to Boston» выдаст множество рекламных сайтов и популярных сайтов заказа авиабилетов. Google возвращает лишь то, что эти веб-сайты сообщают на своих страницах, а не точные результаты в ответ на различные запросы, введенные в системе зака- 1 Обратите внимание, Райан проводит разницу между терминами веб-скра- пер (web-scraper) и веб-краулер (web-crawler). Веб-скрапер – это програм- ма, которая собирает данные и извлекает нужную информацию с одной или нескольких страниц сайта. Веб-краулер – это программа, которая просто обходит или сканирует страницы на одном или нескольких сайтах. В этом плане веб-краулер является синонимом термина поисковый робот (web- spider). – Прим. пер.
Вступление 15 за авиабилетов. Тем не менее правильно разработанный веб-скрапер может собрать данные о ценах на авиабилеты до Бостона за опреде- ленный временной интервал на различных веб-сайтах и подсказать оптимальное время для покупки авиабилета. Вы, вероятно, спросите: «Разве сбор данных – это не то, для чего используется API?» (Если вы не знакомы с API, обратитесь к гла- ве 4.) Ну, тогда API – это фантастическое средство, если вы с его по- мощью сразу найдете то, что искали. Они могут обеспечить передачу потока данных определенного формата с одного сервера на другой. вы можете использовать API для получения различных видов интересу- ющих вас данных, например, твитов или страниц Википедии. В об- щем случае лучше использовать API (если он есть), а не создавать программу-робот для сбора тех же самых данных. Тем не менее есть несколько причин, в силу которых использовать API не представля- ется возможным: • вы собираете данные с сайтов, которые не имеют единого API; • данные, которые вас интересуют, компактны, поэтому API не нужен; • источник данных не имеет инфраструктуры или технических возможностей, позволяющих разработать API. Даже в тех случаях, когда API уже есть, объем обрабатываемых запросов, ограничения скорости обработки запросов, тип или формат возвращаемых данных могут не удовлетворить ваши потребности. Вот именно здесь и начинается сфера применения скрапинга веб- страниц. За некоторыми исключениями, вы можете просмотреть эти страницы в браузере или получить доступ к ним с помощью скрипта Python. Получив доступ к ним с помощью скрипта, вы можете сохра- нить их в базе данных. Сохранив их в базе данных, вы можете выпол- нять любые действия с ними. Очевидно, что существует очень много практических сфер, где требуется доступ к данным практически неограниченного объема. Рыночное прогнозирование рынка, машинный перевод и даже ме- дицинская диагностика уже извлекли огромную пользу, восполь- зовавшись возможностью собрать и проанализировать данные новостных сайтов, переведенный контент и сообщения на медицин- ских форумах. Даже в мире искусства веб-скрапинг уже открыл новые горизонты для творчества. В рамках проекта 2006 года «We Feel Fine» (http://we- feelfine.org/) Джонатан Харрис и Сеп Камвар провели скрапинг англо- язычных блогов для поиска фраз, начинающихся с «I feel» или «I am
Доступ онлайн
В корзину