Современный_скрапинг_веб_сайтов_с_помощью_Python_2021_Райан_М. Руководство по решению его наиболее распространенных задач
Скачать 3.96 Mb.
|
/private. В Twitter файл robots.txt содержит подробные инструкции для ботов Google, Yahoo!, «Яндекса», Microsoft, а также других ботов и поисковых систем, не относящихся ни к одной из предыдущих категорий. Раздел Google (который практически не отличается от разрешений для остальных категорий ботов) выглядит следующим образом: # Google Search Engine Robot User-agent: Googlebot Allow: /?_escaped_fragment_ Allow: /?lang= Allow: /hashtag/*?src= Allow: /search?q=%23 Disallow: /search/realtime Disallow: /search/users Disallow: /search/*/grid Disallow: /*? Disallow: /*/followers Disallow: /*/following Обратите внимание: Twitter ограничивает доступ к разделам своего сайта, имеющим API. Поскольку у Twitter есть хорошо отрегулированный API (на котором можно зарабатывать деньги за счет лицензирования), в интересах компании запретить использование любых «самодельных API», собирающих информацию, самостоятельно сканируя сайт. На первый взгляд файл, сообщающий веб-краулеру, куда нельзя заходить, может показаться ограничительным, однако на самом деле это просто счастье разработчика. Обнаружение файла robots.txt, который запрещает сбор данных определенного раздела сайта, по сути, можно расценить как сообщение веб-мастера о том, что он разрешает доступ веб- краулеров ко всем остальным разделам сайта (в конце концов, если бы это было не так, то вам бы в первую очередь ограничили доступ при написании robots.txt). Например, раздел файла robots.txt из «Википедии», который относится к обычным веб-скраперам (в отличие от поисковых систем), на удивление снисходителен. Он даже доходит до того, что содержит доступный человеку текст приветствия ботов (это для нас!) и блокирует доступ только к нескольким страницам, таким как страницы аутентификации, поиска и «случайной статьи»: # # Friendly, low-speed bots are welcome viewing article pages, but not # dynamically generated pages please. # # Inktomi's "Slurp" can read a minimum delay between hits; if your bot supports # such a thing using the 'Crawl-delay' or another instruction, please let us # know. # # There is a special exception for API mobileview to allow dynamic mobile web # & app views to load section content. # These views aren't HTTP-cached but use parser cache aggressively and don't # expose special: pages etc. # User-agent: * Allow: /w/api.php?action=mobileview& Disallow: /w/ Disallow: /trap/ Disallow: /wiki/Especial:Search Disallow: /wiki/Especial%3ASearch Disallow: /wiki/Special:Collection Disallow: /wiki/Spezial:Sammlung Disallow: /wiki/Special:Random Disallow: /wiki/Special%3ARandom Disallow: /wiki/Special:Search Disallow: /wiki/Special%3ASearch Disallow: /wiki/Spesial:Search Disallow: /wiki/Spesial%3ASearch Disallow: /wiki/Spezial:Search Disallow: /wiki/Spezial%3ASearch Disallow: /wiki/Specjalna:Search Disallow: /wiki/Specjalna%3ASearch Disallow: /wiki/Speciaal:Search Disallow: /wiki/Speciaal%3ASearch Disallow: /wiki/Speciaal:Random Disallow: /wiki/Speciaal%3ARandom Disallow: /wiki/Speciel:Search Disallow: /wiki/Speciel%3ASearch Disallow: /wiki/Speciale:Search Disallow: /wiki/Speciale%3ASearch Disallow: /wiki/Istimewa:Search Disallow: /wiki/Istimewa%3ASearch Disallow: /wiki/Toiminnot:Search Disallow: /wiki/Toiminnot%3ASearch При написании веб-краулеров лишь вам решать, станут ли они подчиняться правилам robots.txt. Однако я настоятельно советую это делать, особенно если ваши веб- краулеры будут проверять все сайты подряд. Три веб-скрапера Поскольку вариации веб-скрапинга безграничны, есть множество способов попасть в юридические неприятности. В данном разделе мы рассмотрим три случая, которые так или иначе стали нарушением закона, обычно применяемого к веб- скраперам, и узнаем, как именно закон был задействован в каждом из этих случаев. eBay против Bidder’s Edge и посягательство на движимое имущество В 1997 году игрушки Beanie Babies пользовались бешеным успехом, технологический сектор бурлил, а онлайн-аукционы были самой популярной новинкой Интернета. Компания под названием Bidder’s Edge основала и разработала новый вид сайта метааукционов. Вместо того чтобы заставлять пользователя переходить с одного аукционного сайта на другой, сравнивая цены, она объединила данные всех аукционов для определенного продукта (например, только что выпущенной куклы Ферби или нового экземпляра Spice World) и давала ссылку на сайт, который предлагал самую низкую цену. Компания Bidder’s Edge добилась этого с помощью целой армии веб-скраперов, которые постоянно делали запросы на веб-серверы различных аукционных сайтов с целью получить информацию о цене и продукте. Самым крупным из всех интернет-аукционов был eBay, и Bidder’s Edge посещала его серверы примерно 100 000 раз в день. Даже по сегодняшним меркам это большой трафик. По данным eBay, в то время он составлял 1,53 % от общего интернет-трафика, что, безусловно, не доставляло радости владельцам аукциона. eBay направил Bidder’s Edge письмо-предупреждение о нарушении прав интеллектуальной собственности с предложением лицензировать свои данные. Однако переговоры по этому лицензированию успеха не имели, и Bidder’s Edge продолжала собирать данные с сайта eBay. Тогда eBay попытался заблокировать IP-адреса, используемые Bidder’s Edge. Было заблокировано 169 IP- адресов, но Bidder’s Edge удалось обойти блокировки с помощью прокси-серверов (серверов, которые пересылают запросы от имени другого компьютера, но применяя собственный IP-адрес прокси-сервера). Вообразите, какое разочарование и неуверенность испытывали от этого решения обе стороны: Bidder’s Edge постоянно искала новые прокси- серверы и покупала новые IP-адреса, по мере того как eBay блокировал старые, а eBay приходилось поддерживать большие списки блокировки для брандмауэров (и нести дополнительные большие затраты на сравнение IP-адресов при проверке каждого пакета). Наконец, в декабре 1999 года eBay подал на компанию Bidder’s Edge в суд по поводу посягательства на движимое имущество. Поскольку серверы eBay были реальными, физическими ресурсами, которыми владела компания, и то, как компания Bidder’s Edge их эксплуатировала, нельзя было назвать нормальным, посягательство на движимое имущество казалось идеальным законом для применения в суде. На самом деле в наше время посягательство на движимое имущество постоянно используется в судебных исках по веб-скрапингу и его принято считать законом, касающимся IT. Суд постановил: чтобы выиграть дело о посягательстве на движимое имущество, eBay должен был доказать две вещи: • у Bidder’s Edge не было разрешения на использование ресурсов eBay; • в результате действий Bidder’s Edge компания eBay понесла финансовые потери. Поскольку имелись запись писем от eBay с предупреждением о нарушении прав интеллектуальной собственности и отчеты IT-отдела компании об использовании серверов и фактических расходах на серверы, eBay было относительно легко это сделать. Конечно, крупные судебные баталии никогда не заканчиваются легко и быстро: были поданы встречные иски, оплачены услуги многих адвокатов, и в итоге в марте 2001-го дело решилось вне суда на сумму, размер которой не раскрывается. Значит ли это, что любое несанкционированное использование чужого сервера автоматически является посягательством на движимое имущество? Не обязательно. История с Bidder’s Edge была крайним случаем; компания задействовала так много ресурсов eBay, что тому пришлось покупать дополнительные серверы, увеличить расходы на электроэнергию и, возможно, нанять дополнительный персонал (может показаться, что 1,53 % — не так уж много, но в крупных компаниях это может составить значительную сумму). В 2003 году Верховный суд Калифорнии вынес решение по другому делу — Корпорация Intel против Хамиди, в котором бывший сотрудник Intel (Хамиди) отправлял сотрудникам Intel нежелательные для компании электронные письма через все ее серверы. Суд постановил следующее: «Заявление Intel отклонено не потому, что электронная корреспонденция, передаваемая через Интернет, обладает уникальным иммунитетом, а потому, что посягательство на движимое имущество — в отличие от только что упомянутых оснований для предъявления претензий — не может быть доказано в Калифорнии без доказательств причинения вреда личной собственности истца или его законным интересам». По сути, Intel не удалось доказать, будто затраты на передачу шести электронных писем, разосланных Хамиди всем сотрудникам (в каждом из которых, что характерно, предусматривалась возможность удаления из списка рассылки Хамиди — по крайней мере он был вежлив!), причинили компании какой-либо финансовый вред. Затраты не лишили Intel никакой собственности и не помешали использованию собственности компании. Соединенные Штаты Америки против Ауэрнхаймера и Акт о компьютерном мошенничестве и злоупотреблении Если информация легкодоступна в Интернете для человека, использующего браузер, то маловероятно, что за автоматическим доступом к той же самой информации сразу последуют неприятности с федералами. Однако стоит любопытному человеку найти в системе безопасности небольшую утечку, как она может быстро вырасти в огромную дыру и стать гораздо более опасной, когда до нее доберутся автоматические веб-скраперы. В 2010 году Эндрю Ауэрнхаймер (Andrew Auernheimer) и Дэниел Спитлер (Daniel Spitler) обратили внимание на интересную функцию iPad: при посещении сайта AT&T с этого устройства вас перенаправляли на URL, содержащий уникальный идентификационный номер вашего iPad: https://dcp2.att.com/OEPClient/openPage?ICCID= Данная страница содержала форму аутентификации с адресом электронной почты пользователя, чей идентификационный номер содержался в URL. Это позволяло пользователям получить доступ к их учетным записям, просто введя пароль. Несмотря на то что потенциальных идентификационных номеров iPad было очень много, при наличии достаточного количества веб-скраперов оказалось возможным перебрать все вероятные номера, притом собирая адреса электронной почты. Предоставляя пользователям эту удобную функцию аутентификации, AT&T, по сути, опубликовала в Интернете адреса электронной почты своих клиентов. Ауэрнхаймер и Спитлер создали веб-скрапер, который собрал 114 000 этих адресов, в том числе частные адреса электронной почты знаменитостей, генеральных директоров корпораций и правительственных чиновников. Затем Ауэрнхаймер (но не Спитлер) отправил данный список и информацию о том, как он был получен, в интернет-таблоид Gawker Media, опубликовавший историю (но не список) под заголовком: «Наихудшее нарушение системы безопасности Apple: обнародована информация о 114 000 владельцах iPad». В июне 2011 года года ФБР провело обыск в доме Ауэрнхаймера в связи со сбором адресов электронной почты, хотя в итоге его арестовали по обвинению в торговле наркотиками. В ноябре 2012 года Ауэрнхаймер был признан винов ным в хищении персональных данных и заговоре с целью получить доступ к компьютеру без разрешения, а затем был приговорен к 41 месяцу лишения свободы в федеральной тюрьме и выплате 73 000 долларов в качестве компенсации. Дело Ауэрнхаймера привлекло внимание адвоката по гражданским правам Орина Керра (Orin Kerr), который присоединился к его адвокатской группе и обжаловал дело Ауэрнхаймера в апелляционном суде третьего округа. В итоге 11 апреля 2014 года (эти юридические процессы обычно занимают довольно много времени) суд третьего округа удовлетворил апелляцию, заявив следу ющее: «Осуждение Ауэрнхаймера по пункту 1 должно быть отменено, поскольку в соответствии с Актом о компьютерном мошенничестве и злоупотреблении (18 U.S.C. § 1030(a)(2)(C)) посещение общедоступного сайта не является несанкционированным доступом. AT&T не использовала пароли или какие-либо иные средства защиты для контроля доступа к адресам электронной почты своих клиентов. То, что AT&T субъективно желала, чтобы посторонние не обнаружили эти данные, или что Ауэрнхаймер, гиперболизируя, охарактеризовал свои действия как “воровство”, не имеет значения. Компания настроила свои серверы таким образом, что информация была доступна каждому, и тем самым разрешила всем желающим просматривать эту информацию. Доступ к адресам электронной почты через открытый сайт AT&T был разрешен в соответствии с CFAA и поэтому не является преступлением». Таким образом, в правосудии восторжествовало здравомыслие, Ауэрнхаймер был в тот же день освобожден из тюрьмы, и все жили долго и счастливо. Хоть в итоге суд и вынес решение, что Ауэрнхаймер не нарушил Акт о компьютерном мошенничестве и злоупотреблении, ФБР провело обыск в его доме, а сам он потратил многие тысячи долларов на оплату юридических услуг, провел три года в залах заседаний и тюрьмах. Какие уроки можем извлечь из этого мы, разработчики веб- скраперов, чтобы избежать подобных ситуаций? Веб-скрапинг любой конфиденциальной информации, будь то персональные данные (в данном случае адреса электронной почты), коммерческие или правительственные секреты, — вероятно, не то, с чем стоит связываться, не имея в под рукой телефона адвоката. Даже если эта информация общедоступна, подумайте вот о чем: «Могли бы обычные пользователи компьютера легко получить доступ к данной информации при желании ее увидеть? Компания действительно хочет, чтобы пользователи видели это?» Мне неоднократно приходилось звонить в компании и сообщать им об уязвимостях, найденных в системе безопасности их сайтов и веб-приложений. Такое поведение способно творить чудеса: «Привет, я специалист по безопасности, и я обнаружила потенциальную уязвимость на вашем сайте. Не могли бы вы направить меня к кому-нибудь, кому я могла бы сообщить об этом и решить проблему?» В вас не только немедленно признают (доброго) хакерского гения — вы также можете получить бесплатные подписки, денежные вознаграждения и многие другие вкусности! Ко всему прочему то, что Ауэрнхаймер передал информацию Gawker Media (прежде чем об этом узнала AT&T) и устроил себе рекламу за счет найденной уязвимости, сделало его еще более привлекательной целью для адвокатов AT&T. Обнаружив уязвимости в системе безопасности сайта, лучше сообщите о них владельцам данного сайта, а не СМИ. У вас может возникнуть желание написать сообщение в блоге и объявить об этом всему миру, особенно если проблема не будет решена немедленно. Однако помните: это ответственность компании, а не ваша. Лучшее, что вы можете сделать, — убрать веб-скраперы (и, насколько возможно, вообще уйти) с сайта! Филд против Google: авторские права и robots.txt Однажды адвокат Блейк Филд (Blake Field) подал иск против Google на том основании, что функция кэширования сайта Google нарушала закон об авторском праве, поскольку показывала копию книги Филда после того, как он удалил ее со своего сайта. Закон об авторском праве позволяет создателю оригинального творческого произведения контролировать его распространение. Аргумент Филда состоял в том, что кэширование Google (после того как Филд удалил книгу со своего сайта) лишило его возможности контролировать распространение его книги. Веб-кэш Google Сканируя сайты, веб-скраперы Google (также известные как боты Google) делают копии этих сайтов и размещают в Интернете. Доступ к данному кэшу может получить любой желающий, используя URL следующего формата: http://webcache.googleusercontent.com/searc h?q=cache:http://pythonscraping.com/ Если сайт, который вы ищете или для которого хотите выполнить веб-скрапинг, недоступен, то можете проверить, нет ли у Google его полезной копии! То, что Филд знал о функции кэширования Google и не предпринял никаких действий, ему не помогло. В конце концов, он мог бы запретить ботам Google кэшировать свой сайт, просто создав файл robots.txt с простыми указаниями о том, какие страницы веб-скраперам следует обрабатывать, а какие — нет. И главное, суд постановил, что положение DMCA о зоне безопасности позволило Google легально кэшировать и отображать сайты, такие как сайт Филда: «[a] поставщик услуг не несет ответственности за денежную компенсацию... за нарушение авторских прав по причине промежуточного или временного хранения материалов в системе или сети, контролируемой или управляемой поставщиком услуг либо для него». 29 Walsh B. The Surprisingly Large Energy Footprint of the Digital Economy [UPDATE], TIME.com, August 14, 2013 (http://ti.me/2IFOF3F). 30 В 2019 г. апелляционный суд 9-го округа США принял решение, что скрапинг публичных сайтов не противоречит закону CFAA (https://bit.ly/39R5TcV). Что касается России, автоматизированный сбор информации с сайтов является законным, если в процессе не нарушается законодательство РФ. — Примеч. ред. Движемся дальше Сеть продолжает развиваться. Технологии, которые открыли нам доступ к изображениям, видео, текстам и другим файлам данных, постоянно изменяются и обновляются. Чтобы идти в ногу со временем, должен развиваться и набор технологий, используемых для веб-скрапинга данных. Кто знает, что будет дальше? Возможно, из последующих редакций данной книги полностью исчезнет JavaScript как устаревшая и редко используемая технология, а вместо этого много внимания получит анализ голограмм HTML8. Но сохранится главное: образ мышления и общий подход, необходимые для успешного веб-скрапинга любого сайта (или того, что мы станем понимать под «сайтами» в будущем). Столкнувшись с любым веб-проектом, всегда следует задать себе такие вопросы. • На какой вопрос я хочу получить ответ или какую задачу хочу решить? • Какие данные помогут мне этого достичь и где они находятся? • Каким образом сайт отображает эти данные? Могу ли я точно определить, в какой части кода сайта содержится нужная информация? • Как изолировать данные и извлечь их? • Какую обработку или анализ необходимо выполнить, чтобы получить от этих данных еще больше пользы? • Как улучшить этот процесс, сделать его более быстрым и надежным? Вам также необходимо понять не только то, как использовать представленные в книге инструменты по отдельности, но и то, как они могут работать совместно для решения более масштабной проблемы. Иногда данные легкодоступны и хорошо отформатированы, что позволяет решить задачу с помощью простого веб-скрапера. В других случаях приходится хорошенько подумать. Например, в главе 11 мы объединили библиотеку Selenium, позволяющую идентифицировать Ajax-изображения, загруженные в Amazon, и Tesseract, чтобы прочитать их с помощью OCR. В задаче «Шесть шагов по “Википедии”» мы использовали регулярные выражения с целью написать веб- краулер, который хранил информацию о ссылках в базе данных, а затем — графовый алгоритм, чтобы ответить на вопрос: «Каков кратчайший путь по ссылкам между страницами Кевина Бейкона и Эрика Айдла?» Когда речь идет об автоматическом сборе данных в Интернете, неразрешимые задачи встречаются редко. Просто запомните: Интернет — это один гигантский API с не очень хорошим пользовательским интерфейсом. Об авторе Райан Митчелл (Ryan Mitchell) — старший инженер- программист в бостонской компании HedgeServ, в которой она разрабатывает API и инструменты для анализа данных. Райан окончила Инженерно-технический колледж им. Франклина В. Олина, имеет степень магистра в области разработки программного обеспечения и сертификат по анализу и обработке данных, полученный на курсах повышения квалификации при Гарвардском университете. До прихода в HedgeServ Райан трудилась в компании Abine, где разрабатывала веб-скраперы и средства автоматизации на Python. Регулярно выступает консультантом проектов по веб- скрапингу для розничной торговли, сферы финансов и фармацевтики. По совместительству работает консультантом и внештатным преподавателем в Северо-Восточном университете и Инженерно-техническом колледже им. Франклина В. Олина. Об обложке Животное, изображенное на обложке, — степной ящер, или саванный панголин (Smutsia temminckii). Это одиночное млекопитающее, ведущее ночной образ жизни. Панголины — близкие родственники броненосцев, ленивцев и муравьедов. Они встречаются в Южной и Восточной Африке. На континенте водятся еще три вида этих ящеров, и все они находятся под угрозой исчезновения. Взрослые панголины достигают в среднем 30–100 сантиметров в длину и весят от 15 до 33 килограммов. Внешне они похожи на броненосцев и покрыты защитными чешуйками темного, светло-коричневого или оливкового цвета. У молодых ящеров чешуйки розоватые. Когда панголину что-то угрожает, его чешуйки на хвосте превращаются в оружие нападения, они могут порезать и поранить противника. У панголинов также есть стратегия защиты, похожая на имеющуюся у скунсов, — они выделяют неприятно пахнущую кислоту из желез, расположенных возле ануса. Это служит предупреждением для потенциальных врагов, а также помогает панголину пометить территорию. Брюхо панголина покрыто не чешуей, а коротким мехом. Подобно своим родичам-муравьедам, панголины придерживаются диеты, состоящей из муравьев и термитов. Их невероятно длинные языки позволяют извлекать еду из бревен и муравейников. Язык панголина длиннее его тела; в расслабленном состоянии он втягивается в грудную полость. Поскольку панголины — одиночные животные, после взросления они живут в норах, которые уходят глубоко под землю. Эти норы прежде часто принадлежали трубкозубам и бородавочникам, а панголины просто захватывают заброшенные жилища. Однако с помощью трех длинных изогнутых когтей на передних лапах ящер при необходимости может легко выкопать собственную нору. Многие животные, изображенные на обложках книг O’Reilly, находятся под угрозой исчезновения; все они важны для нашего мира. Чтобы больше узнать о том, как вы можете им помочь, посетите сайт animals.oreilly.com. Изображение на обложке этой книги взято из книги Royal Natural History Ричарда Лидеккера (Richard Lydekker). |