Чтение онлайн

на главную - закладки

Жанры

Пособие по журналистике данных
Шрифт:

# Просмотреть все строки в таблице

# Unicorn не должен выходить за левый край

Постарайтесь быть как можно более точным и не предполагайте, что программа что–либо знает о странице, которую вы пытаетесь «выскрести».

Теперь, когда вы написали свой первый псевдо–код, давайте сравним его с реальным кодом нашего первого «скребка»:

import scraperwiki

from lxml import html

В этой первой части мы импортируем имеющийся функционал из библиотек — кусочки ранее написанных кодов. scraperwiki предоставит нам возможность скачивать веб–сайты, а lxml является инструментом структурного анализа HTML– документов. Хорошая новость: если вы пишете код «скребка» на языке Python с помощью сайта ScraperWiki,

эти две строки всегда будут одинаковыми.

url = »http://www–news.iaea.org/EventList.aspx»

doc_text = scraperwiki.scrape(url)

doc = html.fromstring(doc_text)

Далее код вводит имя (переменную): url и в качестве его значения устанавливает URL–адрес страницы МАГАТЭ. Это говорит «скребку» о том, что такой объект существует, и что мы хотим уделить ему внимание. Обратите внимание, что URL–адрес находится в кавычках, так как он является не частью программного кода, а строкой, последовательностью символов.

Затем мы используем переменную url в качестве вводной для функции scraperwiki.scrape. Эта функция будет выполнять некую определенную работу — в данном случае она будет загружать веб–страницу. Когда эта работа будет выполнена, ее результаты будут переданы другой переменной, doc_text. doc_text теперь будет содержать актуальный текст веб–сайта — не тот, который вы видите в браузере при посещении страницы, а исходный код, включая теги. Так как осуществлять структурный анализ такого текста не совсем просто, мы используем другую функцию, html.fromstring, для создания особого представления, в котором мы можем легко находить элементы, так называемую объектную модель документа (document object model, DOM).

for row in doc.cssselect(»#tblEvents tr»):

link_in_header = row.cssselect(»h4 a»).pop

event_title = link_in_header.text

print event_title

На этом последнем этапе мы используем DOM для поиска каждой строки в нашей таблице и извлечения из нее заголовка события. Здесь используются две новые концепции: петля и выбор элементов (.cssselect). Петля делает то, что и подразумевается ее названием: она обходит список блоков, назначая каждому из них временное имя (в данном случае это строки) и затем выполняет для каждого из них намеченные действия.

Вторая новая концепция, выбор элементов, использует специальный язык для поиска элементов в документе. Для добавления к HTML–элементам информации о их расположении обычно используются CSS–селекторы, и их же можно использовать для точного отбора этих элементов на странице. В данном случае (строка 6) мы выбираем #tblEvents tr, вследствие чего каждый тэг <tr> в элементе таблицы будет сопоставляться с ID tblEvents (хэш здесь просто обозначает ID). В результате мы получим список элементов <tr>.

То же мы наблюдаем и в следующей строке (строка 7), в которой мы применяем другой селектор для поиска всех тэгов <a> (обозначающих гиперссылку) внутри <h4> (заголовок). Здесь мы хотим искать только один элемент (в каждой строке имеется только один заголовок), поэтому мы должны извлечь его из вершины списка, созданного нашим селектором с помощью функции .pop.

Обратите внимание, что некоторые элементы в DOM содержат настоящий текст, т. е. текст, не являющийся частью языка разметки, который мы можем извлечь, воспользовавшись кодом [element].text, размещенным в строке 8. И, наконец, в строке 9 мы направляем этот текст в консоль ScraperWiki. Если вы теперь запустите ваш «скребок», то в меньшем по размеру окошке начнут появляться названия событий с сайта МАГАТЭ.

Рис 56. A scraper in action (ScraperWiki)

Вы видите работу простейшего «скребка»: он загружает веб–страницу,

преобразует ее в DOM и затем предоставляет вам возможность выбирать и извлекать определенные элементы. На основе данного шаблона вы можете попробовать решить остальные вопросы, используя документацию ScraperWiki и языка Python:

Можно ли найти адрес ссылки, находящейся в заголовке каждого события?

Можно ли выбрать небольшой контейнер, который содержит дату и место, используя CSS–имя его класса, и затем извлечь текст этого элемента?

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

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

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

Фридрих Линденберг, Open Knowledge Foundation

Сеть как источник данных

Как можно узнать больше о том, что существует только в Интернете? Будь то адрес электронной почты, веб–сайт, изображение или статья в Википедии — в данной главе я расскажу вам об инструментах, которые помогут вам получить больше информации об этих элементах.

Веб–инструменты

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

Whois

Если вы посетите сайт whois.domaintools.com(или просто введете whois www.example.comв приложении Terminal.app, если вы работаете на компьютере Mac), вы получите базовую регистрационную информацию практически о любом сайте. В последние годы некоторые владельцы выбирают «приватную» регистрацию, которая не позволяет просматривать их данные, однако в большинстве случаев вы увидите имя, адрес, электронную почту и номер телефона лица, зарегистрировавшего сайт. Вы также можете ввести цифровой IP–адрес и получить данные об организации или физическом лице, являющихся владельцами этого сервера. Это особенно удобно, когда вы пытаетесь получить больше информации о лицах, которые, например, нарушают условия пользования каким–либо сервисом, так как большая часть веб–сайтов регистрирует IP–адрес своих посетителей.

Blekko

Поисковый движок Blekkoпредлагает необычно большой объем информации о внутренней статистике, которую он собирает в Интернете. Если вы введете доменное имя, и дополните его сочетанием «/seo», вы получите страницу с информацией об этом адресе. В первой табличке на Рис 57показано, какие другие сайты ссылаются на данный домен (в порядке популярности). Это может оказаться полезным, когда вы хотите понять, какое освещение получает сайт, и если вы хотите понять, почему он занимает высокие места в результатах поиска Google, так как эти результаты основываются именно на этих ведущих на сайт ссылках. Рис 59показывает, какие другие сайты размещаются на той же машине. Мошенники и спамеры нередко придают законный вид своей деятельности, создавая многочисленные сайты, которые ссылаются друг на друга. Внешне они выглядят как независимые домены и могут даже иметь разные регистрационные данные, однако зачастую они размещаются на одном и том же сервере, так как это значительно дешевле. Эта статистика позволит вам заглянуть внутрь скрытой бизнес–структуры исследуемого вами сайта.

Поделиться:
Популярные книги

Корпулентные достоинства, или Знатный переполох. Дилогия

Цвик Катерина Александровна
Фантастика:
юмористическая фантастика
7.53
рейтинг книги
Корпулентные достоинства, или Знатный переполох. Дилогия

Как я строил магическую империю 7

Зубов Константин
7. Как я строил магическую империю
Фантастика:
попаданцы
постапокалипсис
аниме
фантастика: прочее
5.00
рейтинг книги
Как я строил магическую империю 7

На границе империй. Том 9. Часть 5

INDIGO
18. Фортуна дама переменчивая
Фантастика:
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 9. Часть 5

Хроники хвостатых: Ну мы же биджу...

Rana13
Фантастика:
фэнтези
5.00
рейтинг книги
Хроники хвостатых: Ну мы же биджу...

Мастер 8

Чащин Валерий
8. Мастер
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Мастер 8

Неомифы

Неделько Григорий Андреевич
Фантастика:
научная фантастика
5.00
рейтинг книги
Неомифы

Измена. Право на семью

Арская Арина
Любовные романы:
современные любовные романы
5.20
рейтинг книги
Измена. Право на семью

Последний Паладин. Том 2

Саваровский Роман
2. Путь Паладина
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Последний Паладин. Том 2

Хуррит

Рави Ивар
Фантастика:
героическая фантастика
попаданцы
альтернативная история
5.00
рейтинг книги
Хуррит

Голодные игры

Коллинз Сьюзен
1. Голодные игры
Фантастика:
социально-философская фантастика
боевая фантастика
9.48
рейтинг книги
Голодные игры

Чехов. Книга 2

Гоблин (MeXXanik)
2. Адвокат Чехов
Фантастика:
фэнтези
альтернативная история
аниме
5.00
рейтинг книги
Чехов. Книга 2

Сойка-пересмешница

Коллинз Сьюзен
3. Голодные игры
Фантастика:
социально-философская фантастика
боевая фантастика
9.25
рейтинг книги
Сойка-пересмешница

Купец III ранга

Вяч Павел
3. Купец
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Купец III ранга

Возвращение Безумного Бога

Тесленок Кирилл Геннадьевич
1. Возвращение Безумного Бога
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Возвращение Безумного Бога