Книжная полка Сохранить
Размер шрифта:
А
А
А
|  Шрифт:
Arial
Times
|  Интервал:
Стандартный
Средний
Большой
|  Цвет сайта:
Ц
Ц
Ц
Ц
Ц

Скрапинг веб-сайтов с помощью Python

Покупка
Артикул: 712427.01.99
К покупке доступен более свежий выпуск Перейти
Изучите методы скрапинга и краулинга веб-сайтов, чтобы получить доступ к неограниченному объему данных в любом уголке Интернета в любом формате. С помощью этого практического руководства вы узнаете, как использовать скрипты Python и веб-API, чтобы одновременно собрать и обработать данные с тысяч или даже миллионов веб-страниц. Идеально подходящая для программистов, специалистов по безопасности и веб-администраторов, знакомых с языком Python, эта книга знакомит не только с основными принципами работы веб-скраперов, но и углубляется в более сложные темы, такие как анализ сырых данных или использование скраперов для тестирования интерфейса веб-сайта Примеры программного кода, приведенные в книге, помогут разобраться в этих принципах на практике.
Митчелл, Р. Скрапинг веб-сайтов с помощью Python / Р. Митчелл ; пер. с англ. А. В. Груздева. - Москва : ДМК Пресс, 2016. - 280 с. - ISBN 978-5-97060-223-2. - Текст : электронный. - URL: https://znanium.com/catalog/product/1027754 (дата обращения: 20.04.2024). – Режим доступа: по подписке.
Фрагмент текстового слоя документа размещен для индексирующих роботов. Для полноценной работы с документом, пожалуйста, перейдите в ридер.
Райан Митчелл

Скрапинг веб-сайтов  
с помощью 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). Веб-скрапер – это программа, которая собирает данные и извлекает нужную информацию с одной или 
нескольких страниц сайта. Веб-краулер – это программа, которая просто 
обходит или сканирует страницы на одном или нескольких сайтах. В этом 
плане веб-краулер является синонимом термина поисковый робот (webspider). – Прим. пер.

Вступление  15

за авиабилетов. Тем не менее правильно разработанный веб-скрапер 
может собрать данные о ценах на авиабилеты до Бостона за определенный временной интервал на различных веб-сайтах и подсказать 
оптимальное время для покупки авиабилета.
Вы, вероятно, спросите: «Разве сбор данных – это не то, для чего 
используется API?» (Если вы не знакомы с API, обратитесь к главе 4.) Ну, тогда API – это фантастическое средство, если вы с его помощью сразу найдете то, что искали. Они могут обеспечить передачу 
потока данных определенного формата с одного сервера на другой. вы 
можете использовать API для получения различных видов интересующих вас данных, например, твитов или страниц Википедии. В общем случае лучше использовать API (если он есть), а не создавать 
программу-робот для сбора тех же самых данных. Тем не менее есть 
несколько причин, в силу которых использовать API не представляется возможным:
 •
вы собираете данные с сайтов, которые не имеют единого API;
 •
данные, которые вас интересуют, компактны, поэтому API не 
нужен;
 •
источник данных не имеет инфраструктуры или технических 
возможностей, позволяющих разработать API.
Даже в тех случаях, когда API уже есть, объем обрабатываемых 
запросов, ограничения скорости обработки запросов, тип или формат 
возвращаемых данных могут не удовлетворить ваши потребности.
Вот именно здесь и начинается сфера применения скрапинга вебстраниц. За некоторыми исключениями, вы можете просмотреть эти 
страницы в браузере или получить доступ к ним с помощью скрипта 
Python. Получив доступ к ним с помощью скрипта, вы можете сохранить их в базе данных. Сохранив их в базе данных, вы можете выполнять любые действия с ними.
Очевидно, что существует очень много практических сфер, где 
требуется доступ к данным практически неограниченного объема. 
Рыночное прогнозирование рынка, машинный перевод и даже медицинская диагностика уже извлекли огромную пользу, воспользовавшись возможностью собрать и проанализировать данные 
новостных сайтов, переведенный контент и сообщения на медицинских форумах.
Даже в мире искусства веб-скрапинг уже открыл новые горизонты 
для творчества. В рамках проекта 2006 года «We Feel Fine» (http://wefeelfine.org/) Джонатан Харрис и Сеп Камвар провели скрапинг англоязычных блогов для поиска фраз, начинающихся с «I feel» или «I am 

К покупке доступен более свежий выпуск Перейти