SlideShare uma empresa Scribd logo
1 de 33
Baixar para ler offline
Извлечение информации
из веб-страниц
Михаил Коробов, ScrapingHub
PyCon RU 2014
План
• Скачать страницу
• Вытащить информацию
Скачать страницу
• wget / curl
• urllib
• requests
• twisted / tornado / gevent / ...
• scrapy / ...
HTML
<html>
<head></head>
<body>
<div>TEXT-1</div>
<div>
TEXT-2 <b>TEXT-3</b>
</div>
<b>TEXT-4</b>
</body>
</html>
HTML
XPath
//b
XPath
//div/b
XPath
//div[2]/text()
XPath
//div[2]//text()
Получение информации из
HTML
• re (регулярные выражения)
• XPath селекторы
• CSS3 селекторы
• jquery селекторы
• parsley селекторы
• ...
Не пишем селекторы
• Scrapely (https://github.com/scrapy/scrapely)
• Portia (https://github.com/scrapinghub/portia)
Portia: демо
Сложные случаи:
много сайтов, все разные;
структура сайта
неизвестна заранее.
Задачи
• Обход сайта
• Извлечение информации
Обход сайта:
обычно - правила
• Переходить по ссылкам /contact, /about и т.д. (в
зависимости от задачи);
• переходить по ссылкам, ведущим на тот же домен;
• ограничения на глубину переходов;
• ограничения на общее количество переходов;
• ...
• паджинация?
• формы поиска?
Извлечение информации
• Правила / регекспы работают неплохо для
телефонов, факсов и т.д.
• Правила работают хуже для более сложных
задач: имена людей, названия организаций и т.д.
• В науке задача известна как Named Entity
Recognition (NER).
Named Entity Recognition
Для английского языка часто решается с помощью
машинного обучения
1. Определяем, что именно хотим найти.
2. Размечаем веб-страницы вручную.
3. Тренируем модель на размеченных данных.
4. Извлекаем информацию из новых веб-страниц.
Named Entity Recognition
Для английского языка часто решается с помощью
машинного обучения
1. Определяем, что именно хотим найти.1
2. Размечаем веб-страницы вручную.
3. Тренируем модель на размеченных данных.
4. Извлекаем информацию из новых веб-страниц.
1. Примеры именованных
сущностей
• название организации
• имя человека
• должность человека
• адрес (дом, улица и т.д.)
• город
• штат, провинция, область
• страна
• телефон
• факс
• время работы
1. Примеры именованных
сущностей
• название организации - ORG
• имя человека - PER
• должность человека - FUNC
• адрес (дом, улица и т.д.) - STREET
• город - CITY
• штат, провинция, область - STATE
• страна - COUNTRY
• телефон - TEL
• факс - FAX
• время работы - HOURS
Named Entity Recognition
Для английского языка часто решается с помощью
машинного обучения
1. Определяем, что именно хотим найти.
2. Размечаем веб-страницы вручную.1
3. Тренируем модель на размеченных данных.
4. Извлекаем информацию из новых веб-страниц.
2. Инструменты для ручной
разметки
• https://github.com/xtannier/WebAnnotator
• https://gate.ac.uk/
• http://brat.nlplab.org/
Разметка с помощью
WebAnnotator
(расширение для Firefox)
Named Entity Recognition
Для английского языка часто решается с помощью
машинного обучения
1. Определяем, что именно хотим найти.
2. Размечаем веб-страницы вручную.
3. Тренируем модель на размеченных данных.1
4. Извлекаем информацию из новых веб-страниц.
3. Приводим задачу к виду,
удобному для машинного обучения
• Веб-страница => последовательность токенов;
• для каждого токена сохраняем информацию о
том, где он расположен в HTML;
• каждому токену присваиваем метку.
Инструмент:
https://github.com/scrapinghub/webstruct
Одна именованная
сущность - это один или
несколько токенов
ORG
© Old Tea Cafe All Rights Reserved
Для машинного обучения - сложно и неудобно
IOB-кодирование
• Токенам "вне" именованных сущностей - тег O1
• Первому токену сущности - тег B-ENTITY1
• Всем остальным токенам сущности - тег I-ENTITY
I-ORGB-ORG
© Old Tea Cafe All Rights Reserved
O O OOI-ORG
Свели задачу к "стандартной"
задаче классификации
• Входные данные - информация о токене (фичи)
• Предсказание - метка, закодированная IOB
• ... + одна тонкость - чтоб улучшить качество
предсказания, используют классификаторы,
учитывающие последовательность меток (обычно
это Conditional Random Fields)
Примеры фич
• токен == "Cafe"?
• первая буква - заглавная?
• токен - это название месяца?
• предыдущие два токена - "© 2014"?
• токен - внутри html-элемента <title>?
• токен - последний в своем html-элементе?
Собираем все вместе
(один из вариантов)
• Размечаем веб-странички с помощью WebAnnotator
• Используем WebStruct, чтобы загрузить
тренировочные данные, закодировать сущности в IOB
• Пишем функции извлечения фич (и/или используем
готовые из WebStruct)
• Тренируем CRF-модель с помощью python-crfsuite
• С помощью WebStruct соединяем все вместе
Недостатки
• Нужно достаточно много тренировочных данных
(хорошо бы несколько сотен страниц)
• 100% точности достичь невозможно
• Если фичи извлекаются питоньими функциями, и
их много, то это не очень быстро (5-20 страниц в
секунду)
Достоинства
• Работает;
• понятно, как улучшать;
• понятно, как адаптировать к новой предметной
области;
• часть работы (разметка тренировочных данных)
может быть выполнена непрограммистом.
Советы
• Понимать, что происходит внутри;
• не действовать "вслепую", не воспринимать все
как черный ящик
• пройти курсы на Coursera / ...
• почитать книжки.

Mais conteúdo relacionado

Mais procurados

Как устроен NoSQL, Андрей Аксенов (Sphinx)
Как устроен NoSQL, Андрей Аксенов (Sphinx)Как устроен NoSQL, Андрей Аксенов (Sphinx)
Как устроен NoSQL, Андрей Аксенов (Sphinx)Ontico
 
Go для python-программистов
Go для python-программистовGo для python-программистов
Go для python-программистовKonstantin Cherkasov
 
Сравнение форматов и библиотек сериализации / Антон Рыжов (Qrator Labs)
Сравнение форматов и библиотек сериализации / Антон Рыжов (Qrator Labs)Сравнение форматов и библиотек сериализации / Антон Рыжов (Qrator Labs)
Сравнение форматов и библиотек сериализации / Антон Рыжов (Qrator Labs)Ontico
 
запросы в Access 2007 для дистанционных курсов
запросы в Access 2007 для дистанционных курсовзапросы в Access 2007 для дистанционных курсов
запросы в Access 2007 для дистанционных курсовishuk
 
Ссылочные профили популярных в Яндексе сайтов
Ссылочные профили популярных в Яндексе сайтовСсылочные профили популярных в Яндексе сайтов
Ссылочные профили популярных в Яндексе сайтовСергей Кокшаров
 
2013-02-02 03 Голушко. Полнотекстовый поиск с Elasticsearch
2013-02-02 03 Голушко. Полнотекстовый поиск с Elasticsearch2013-02-02 03 Голушко. Полнотекстовый поиск с Elasticsearch
2013-02-02 03 Голушко. Полнотекстовый поиск с ElasticsearchОмские ИТ-субботники
 
А. Аксенов "Как устроен NoSql", DUMP-2014
А. Аксенов "Как устроен NoSql", DUMP-2014А. Аксенов "Как устроен NoSql", DUMP-2014
А. Аксенов "Как устроен NoSql", DUMP-2014it-people
 
лекция информационные ресурсы
лекция информационные ресурсылекция информационные ресурсы
лекция информационные ресурсыTatjana Reichert
 
Сергей Пузанков — XML
Сергей Пузанков — XMLСергей Пузанков — XML
Сергей Пузанков — XMLYandex
 
Web осень 2013 лекция 3
Web осень 2013 лекция 3Web осень 2013 лекция 3
Web осень 2013 лекция 3Technopark
 

Mais procurados (14)

Rom - Ruby Object Mapper
Rom - Ruby Object MapperRom - Ruby Object Mapper
Rom - Ruby Object Mapper
 
Как устроен NoSQL, Андрей Аксенов (Sphinx)
Как устроен NoSQL, Андрей Аксенов (Sphinx)Как устроен NoSQL, Андрей Аксенов (Sphinx)
Как устроен NoSQL, Андрей Аксенов (Sphinx)
 
Apache fop
Apache fopApache fop
Apache fop
 
Go для python-программистов
Go для python-программистовGo для python-программистов
Go для python-программистов
 
Сравнение форматов и библиотек сериализации / Антон Рыжов (Qrator Labs)
Сравнение форматов и библиотек сериализации / Антон Рыжов (Qrator Labs)Сравнение форматов и библиотек сериализации / Антон Рыжов (Qrator Labs)
Сравнение форматов и библиотек сериализации / Антон Рыжов (Qrator Labs)
 
запросы в Access 2007 для дистанционных курсов
запросы в Access 2007 для дистанционных курсовзапросы в Access 2007 для дистанционных курсов
запросы в Access 2007 для дистанционных курсов
 
Ссылочные профили популярных в Яндексе сайтов
Ссылочные профили популярных в Яндексе сайтовСсылочные профили популярных в Яндексе сайтов
Ссылочные профили популярных в Яндексе сайтов
 
2013-02-02 03 Голушко. Полнотекстовый поиск с Elasticsearch
2013-02-02 03 Голушко. Полнотекстовый поиск с Elasticsearch2013-02-02 03 Голушко. Полнотекстовый поиск с Elasticsearch
2013-02-02 03 Голушко. Полнотекстовый поиск с Elasticsearch
 
А. Аксенов "Как устроен NoSql", DUMP-2014
А. Аксенов "Как устроен NoSql", DUMP-2014А. Аксенов "Как устроен NoSql", DUMP-2014
А. Аксенов "Как устроен NoSql", DUMP-2014
 
лекция информационные ресурсы
лекция информационные ресурсылекция информационные ресурсы
лекция информационные ресурсы
 
Php
PhpPhp
Php
 
Как устроены поисковые системы
Как устроены поисковые системыКак устроены поисковые системы
Как устроены поисковые системы
 
Сергей Пузанков — XML
Сергей Пузанков — XMLСергей Пузанков — XML
Сергей Пузанков — XML
 
Web осень 2013 лекция 3
Web осень 2013 лекция 3Web осень 2013 лекция 3
Web осень 2013 лекция 3
 

Semelhante a Извлечение информации из веб-страниц - Михаил Коробов, PyCon RU 2014

15.03.19 WebPromo SEOday SEO-инсайты из логов: от WP блога до международного ...
15.03.19 WebPromo SEOday SEO-инсайты из логов: от WP блога до международного ...15.03.19 WebPromo SEOday SEO-инсайты из логов: от WP блога до международного ...
15.03.19 WebPromo SEOday SEO-инсайты из логов: от WP блога до международного ...Vladislav Morgun
 
Andrew Aksyonoff "Архитектура вокруг поиска"
Andrew Aksyonoff "Архитектура вокруг поиска"Andrew Aksyonoff "Архитектура вокруг поиска"
Andrew Aksyonoff "Архитектура вокруг поиска"Fwdays
 
Автоматизация SEO-процессов в продуктовых компаниях - DVOMA.pro 30.08
Автоматизация SEO-процессов в продуктовых компаниях - DVOMA.pro 30.08Автоматизация SEO-процессов в продуктовых компаниях - DVOMA.pro 30.08
Автоматизация SEO-процессов в продуктовых компаниях - DVOMA.pro 30.08Vladislav Morgun
 
Владислав Моргун
Владислав МоргунВладислав Моргун
Владислав МоргунSEO.UA
 
Natural Language Processing (NLP) with .NET for #dotnetby meetup-29
Natural Language Processing (NLP) with .NET for #dotnetby meetup-29Natural Language Processing (NLP) with .NET for #dotnetby meetup-29
Natural Language Processing (NLP) with .NET for #dotnetby meetup-29Sergey Tihon
 
Web весна 2013 лекция 1
Web весна 2013 лекция 1Web весна 2013 лекция 1
Web весна 2013 лекция 1Technopark
 
Алексей Бережной - http-протокол
Алексей Бережной - http-протоколАлексей Бережной - http-протокол
Алексей Бережной - http-протоколYandex
 
Синяя Борода. История одного проекта.
Синяя Борода. История одного проекта.Синяя Борода. История одного проекта.
Синяя Борода. История одного проекта.Andrew Mayorov
 
Баба-Яга против! — Роман Дворнов, Ostrovok.ru
Баба-Яга против! — Роман Дворнов, Ostrovok.ruБаба-Яга против! — Роман Дворнов, Ostrovok.ru
Баба-Яга против! — Роман Дворнов, Ostrovok.ruYandex
 
Консольные приложения на Go
Консольные приложения на GoКонсольные приложения на Go
Консольные приложения на GoAndrey Smirnov
 
Владимир Лучанинов. Сделай сам анализатор SERP
Владимир Лучанинов. Сделай сам анализатор SERPВладимир Лучанинов. Сделай сам анализатор SERP
Владимир Лучанинов. Сделай сам анализатор SERPOctopus Events
 
Blackbox-тестирование веб-приложений
Blackbox-тестирование веб-приложенийBlackbox-тестирование веб-приложений
Blackbox-тестирование веб-приложенийbeched
 
Телепортация MODX - MODX Meetup Minsk
Телепортация MODX - MODX Meetup MinskТелепортация MODX - MODX Meetup Minsk
Телепортация MODX - MODX Meetup MinskMODX Беларусь
 
Введение в Python и Django
Введение в Python и DjangoВведение в Python и Django
Введение в Python и DjangoTaras Lyapun
 
PostgreSQL performance recipes
PostgreSQL performance recipesPostgreSQL performance recipes
PostgreSQL performance recipesAlexey Ermakov
 
Алексей Бережной — «HTTP-протокл»
Алексей Бережной — «HTTP-протокл»Алексей Бережной — «HTTP-протокл»
Алексей Бережной — «HTTP-протокл»Yandex
 
Баба Яга против!
Баба Яга против!Баба Яга против!
Баба Яга против!Roman Dvornov
 

Semelhante a Извлечение информации из веб-страниц - Михаил Коробов, PyCon RU 2014 (20)

15.03.19 WebPromo SEOday SEO-инсайты из логов: от WP блога до международного ...
15.03.19 WebPromo SEOday SEO-инсайты из логов: от WP блога до международного ...15.03.19 WebPromo SEOday SEO-инсайты из логов: от WP блога до международного ...
15.03.19 WebPromo SEOday SEO-инсайты из логов: от WP блога до международного ...
 
Andrew Aksyonoff "Архитектура вокруг поиска"
Andrew Aksyonoff "Архитектура вокруг поиска"Andrew Aksyonoff "Архитектура вокруг поиска"
Andrew Aksyonoff "Архитектура вокруг поиска"
 
Автоматизация SEO-процессов в продуктовых компаниях - DVOMA.pro 30.08
Автоматизация SEO-процессов в продуктовых компаниях - DVOMA.pro 30.08Автоматизация SEO-процессов в продуктовых компаниях - DVOMA.pro 30.08
Автоматизация SEO-процессов в продуктовых компаниях - DVOMA.pro 30.08
 
Владислав Моргун
Владислав МоргунВладислав Моргун
Владислав Моргун
 
Natural Language Processing (NLP) with .NET for #dotnetby meetup-29
Natural Language Processing (NLP) with .NET for #dotnetby meetup-29Natural Language Processing (NLP) with .NET for #dotnetby meetup-29
Natural Language Processing (NLP) with .NET for #dotnetby meetup-29
 
Web весна 2013 лекция 1
Web весна 2013 лекция 1Web весна 2013 лекция 1
Web весна 2013 лекция 1
 
Алексей Бережной - http-протокол
Алексей Бережной - http-протоколАлексей Бережной - http-протокол
Алексей Бережной - http-протокол
 
Синяя Борода. История одного проекта.
Синяя Борода. История одного проекта.Синяя Борода. История одного проекта.
Синяя Борода. История одного проекта.
 
Баба-Яга против! — Роман Дворнов, Ostrovok.ru
Баба-Яга против! — Роман Дворнов, Ostrovok.ruБаба-Яга против! — Роман Дворнов, Ostrovok.ru
Баба-Яга против! — Роман Дворнов, Ostrovok.ru
 
диплом
дипломдиплом
диплом
 
PowerShell
PowerShellPowerShell
PowerShell
 
Консольные приложения на Go
Консольные приложения на GoКонсольные приложения на Go
Консольные приложения на Go
 
Sivko
SivkoSivko
Sivko
 
Владимир Лучанинов. Сделай сам анализатор SERP
Владимир Лучанинов. Сделай сам анализатор SERPВладимир Лучанинов. Сделай сам анализатор SERP
Владимир Лучанинов. Сделай сам анализатор SERP
 
Blackbox-тестирование веб-приложений
Blackbox-тестирование веб-приложенийBlackbox-тестирование веб-приложений
Blackbox-тестирование веб-приложений
 
Телепортация MODX - MODX Meetup Minsk
Телепортация MODX - MODX Meetup MinskТелепортация MODX - MODX Meetup Minsk
Телепортация MODX - MODX Meetup Minsk
 
Введение в Python и Django
Введение в Python и DjangoВведение в Python и Django
Введение в Python и Django
 
PostgreSQL performance recipes
PostgreSQL performance recipesPostgreSQL performance recipes
PostgreSQL performance recipes
 
Алексей Бережной — «HTTP-протокл»
Алексей Бережной — «HTTP-протокл»Алексей Бережной — «HTTP-протокл»
Алексей Бережной — «HTTP-протокл»
 
Баба Яга против!
Баба Яга против!Баба Яга против!
Баба Яга против!
 

Mais de it-people

«Про аналитику и серебряные пули» Александр Подсобляев, Rambler&Co
«Про аналитику и серебряные пули» Александр Подсобляев, Rambler&Co«Про аналитику и серебряные пули» Александр Подсобляев, Rambler&Co
«Про аналитику и серебряные пули» Александр Подсобляев, Rambler&Coit-people
 
«Scrapy internals» Александр Сибиряков, Scrapinghub
«Scrapy internals» Александр Сибиряков, Scrapinghub«Scrapy internals» Александр Сибиряков, Scrapinghub
«Scrapy internals» Александр Сибиряков, Scrapinghubit-people
 
«Отладка в Python 3.6: Быстрее, Выше, Сильнее» Елизавета Шашкова, JetBrains
«Отладка в Python 3.6: Быстрее, Выше, Сильнее» Елизавета Шашкова, JetBrains«Отладка в Python 3.6: Быстрее, Выше, Сильнее» Елизавета Шашкова, JetBrains
«Отладка в Python 3.6: Быстрее, Выше, Сильнее» Елизавета Шашкова, JetBrainsit-people
 
«Gevent — быть или не быть?» Александр Мокров, Positive Technologies
«Gevent — быть или не быть?» Александр Мокров, Positive Technologies«Gevent — быть или не быть?» Александр Мокров, Positive Technologies
«Gevent — быть или не быть?» Александр Мокров, Positive Technologiesit-people
 
«Ещё один Поиск Яндекса» Александр Кошелев, Яндекс
«Ещё один Поиск Яндекса» Александр Кошелев, Яндекс«Ещё один Поиск Яндекса» Александр Кошелев, Яндекс
«Ещё один Поиск Яндекса» Александр Кошелев, Яндексit-people
 
«How I Learned to Stop Worrying and Love the BFG: нагрузочное тестирование со...
«How I Learned to Stop Worrying and Love the BFG: нагрузочное тестирование со...«How I Learned to Stop Worrying and Love the BFG: нагрузочное тестирование со...
«How I Learned to Stop Worrying and Love the BFG: нагрузочное тестирование со...it-people
 
«Write once run anywhere — почём опиум для народа?» Игорь Новиков, Scalr
«Write once run anywhere — почём опиум для народа?» Игорь Новиков, Scalr«Write once run anywhere — почём опиум для народа?» Игорь Новиков, Scalr
«Write once run anywhere — почём опиум для народа?» Игорь Новиков, Scalrit-people
 
«Gensim — тематическое моделирование для людей» Иван Меньших, Лев Константино...
«Gensim — тематическое моделирование для людей» Иван Меньших, Лев Константино...«Gensim — тематическое моделирование для людей» Иван Меньших, Лев Константино...
«Gensim — тематическое моделирование для людей» Иван Меньших, Лев Константино...it-people
 
«Тотальный контроль производительности» Михаил Юматов, ЦИАН
«Тотальный контроль производительности» Михаил Юматов, ЦИАН«Тотальный контроль производительности» Михаил Юматов, ЦИАН
«Тотальный контроль производительности» Михаил Юматов, ЦИАНit-people
 
«Детские болезни live-чата» Ольга Сентемова, Тинькофф Банк
«Детские болезни live-чата» Ольга Сентемова, Тинькофф Банк«Детские болезни live-чата» Ольга Сентемова, Тинькофф Банк
«Детские болезни live-чата» Ольга Сентемова, Тинькофф Банкit-people
 
«Микросервисы наносят ответный удар!» Олег Чуркин, Rambler&Co
«Микросервисы наносят ответный удар!» Олег Чуркин, Rambler&Co«Микросервисы наносят ответный удар!» Олег Чуркин, Rambler&Co
«Микросервисы наносят ответный удар!» Олег Чуркин, Rambler&Coit-people
 
«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНС
«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНС«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНС
«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНСit-people
 
«Что такое serverless-архитектура и как с ней жить?» Николай Марков, Aligned ...
«Что такое serverless-архитектура и как с ней жить?» Николай Марков, Aligned ...«Что такое serverless-архитектура и как с ней жить?» Николай Марков, Aligned ...
«Что такое serverless-архитектура и как с ней жить?» Николай Марков, Aligned ...it-people
 
«Python на острие бритвы: PyPy project» Александр Кошкин, Positive Technologies
«Python на острие бритвы: PyPy project» Александр Кошкин, Positive Technologies«Python на острие бритвы: PyPy project» Александр Кошкин, Positive Technologies
«Python на острие бритвы: PyPy project» Александр Кошкин, Positive Technologiesit-people
 
«PyWat. А хорошо ли вы знаете Python?» Александр Швец, Marilyn System
«PyWat. А хорошо ли вы знаете Python?» Александр Швец, Marilyn System«PyWat. А хорошо ли вы знаете Python?» Александр Швец, Marilyn System
«PyWat. А хорошо ли вы знаете Python?» Александр Швец, Marilyn Systemit-people
 
«(Без)опасный Python», Иван Цыганов, Positive Technologies
«(Без)опасный Python», Иван Цыганов, Positive Technologies«(Без)опасный Python», Иван Цыганов, Positive Technologies
«(Без)опасный Python», Иван Цыганов, Positive Technologiesit-people
 
«Python of Things», Кирилл Борисов, Яндекс
«Python of Things», Кирилл Борисов, Яндекс«Python of Things», Кирилл Борисов, Яндекс
«Python of Things», Кирилл Борисов, Яндексit-people
 
«Как сделать так, чтобы тесты на Swift не причиняли боль» Сычев Александр, Ra...
«Как сделать так, чтобы тесты на Swift не причиняли боль» Сычев Александр, Ra...«Как сделать так, чтобы тесты на Swift не причиняли боль» Сычев Александр, Ra...
«Как сделать так, чтобы тесты на Swift не причиняли боль» Сычев Александр, Ra...it-people
 
«Клиенту и серверу нужно поговорить» Прокопов Никита, Cognician
«Клиенту и серверу нужно поговорить» Прокопов Никита, Cognician«Клиенту и серверу нужно поговорить» Прокопов Никита, Cognician
«Клиенту и серверу нужно поговорить» Прокопов Никита, Cognicianit-people
 
«Кошелек или деньги: сложный выбор между памятью и процессором» Алексеенко Иг...
«Кошелек или деньги: сложный выбор между памятью и процессором» Алексеенко Иг...«Кошелек или деньги: сложный выбор между памятью и процессором» Алексеенко Иг...
«Кошелек или деньги: сложный выбор между памятью и процессором» Алексеенко Иг...it-people
 

Mais de it-people (20)

«Про аналитику и серебряные пули» Александр Подсобляев, Rambler&Co
«Про аналитику и серебряные пули» Александр Подсобляев, Rambler&Co«Про аналитику и серебряные пули» Александр Подсобляев, Rambler&Co
«Про аналитику и серебряные пули» Александр Подсобляев, Rambler&Co
 
«Scrapy internals» Александр Сибиряков, Scrapinghub
«Scrapy internals» Александр Сибиряков, Scrapinghub«Scrapy internals» Александр Сибиряков, Scrapinghub
«Scrapy internals» Александр Сибиряков, Scrapinghub
 
«Отладка в Python 3.6: Быстрее, Выше, Сильнее» Елизавета Шашкова, JetBrains
«Отладка в Python 3.6: Быстрее, Выше, Сильнее» Елизавета Шашкова, JetBrains«Отладка в Python 3.6: Быстрее, Выше, Сильнее» Елизавета Шашкова, JetBrains
«Отладка в Python 3.6: Быстрее, Выше, Сильнее» Елизавета Шашкова, JetBrains
 
«Gevent — быть или не быть?» Александр Мокров, Positive Technologies
«Gevent — быть или не быть?» Александр Мокров, Positive Technologies«Gevent — быть или не быть?» Александр Мокров, Positive Technologies
«Gevent — быть или не быть?» Александр Мокров, Positive Technologies
 
«Ещё один Поиск Яндекса» Александр Кошелев, Яндекс
«Ещё один Поиск Яндекса» Александр Кошелев, Яндекс«Ещё один Поиск Яндекса» Александр Кошелев, Яндекс
«Ещё один Поиск Яндекса» Александр Кошелев, Яндекс
 
«How I Learned to Stop Worrying and Love the BFG: нагрузочное тестирование со...
«How I Learned to Stop Worrying and Love the BFG: нагрузочное тестирование со...«How I Learned to Stop Worrying and Love the BFG: нагрузочное тестирование со...
«How I Learned to Stop Worrying and Love the BFG: нагрузочное тестирование со...
 
«Write once run anywhere — почём опиум для народа?» Игорь Новиков, Scalr
«Write once run anywhere — почём опиум для народа?» Игорь Новиков, Scalr«Write once run anywhere — почём опиум для народа?» Игорь Новиков, Scalr
«Write once run anywhere — почём опиум для народа?» Игорь Новиков, Scalr
 
«Gensim — тематическое моделирование для людей» Иван Меньших, Лев Константино...
«Gensim — тематическое моделирование для людей» Иван Меньших, Лев Константино...«Gensim — тематическое моделирование для людей» Иван Меньших, Лев Константино...
«Gensim — тематическое моделирование для людей» Иван Меньших, Лев Константино...
 
«Тотальный контроль производительности» Михаил Юматов, ЦИАН
«Тотальный контроль производительности» Михаил Юматов, ЦИАН«Тотальный контроль производительности» Михаил Юматов, ЦИАН
«Тотальный контроль производительности» Михаил Юматов, ЦИАН
 
«Детские болезни live-чата» Ольга Сентемова, Тинькофф Банк
«Детские болезни live-чата» Ольга Сентемова, Тинькофф Банк«Детские болезни live-чата» Ольга Сентемова, Тинькофф Банк
«Детские болезни live-чата» Ольга Сентемова, Тинькофф Банк
 
«Микросервисы наносят ответный удар!» Олег Чуркин, Rambler&Co
«Микросервисы наносят ответный удар!» Олег Чуркин, Rambler&Co«Микросервисы наносят ответный удар!» Олег Чуркин, Rambler&Co
«Микросервисы наносят ответный удар!» Олег Чуркин, Rambler&Co
 
«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНС
«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНС«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНС
«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНС
 
«Что такое serverless-архитектура и как с ней жить?» Николай Марков, Aligned ...
«Что такое serverless-архитектура и как с ней жить?» Николай Марков, Aligned ...«Что такое serverless-архитектура и как с ней жить?» Николай Марков, Aligned ...
«Что такое serverless-архитектура и как с ней жить?» Николай Марков, Aligned ...
 
«Python на острие бритвы: PyPy project» Александр Кошкин, Positive Technologies
«Python на острие бритвы: PyPy project» Александр Кошкин, Positive Technologies«Python на острие бритвы: PyPy project» Александр Кошкин, Positive Technologies
«Python на острие бритвы: PyPy project» Александр Кошкин, Positive Technologies
 
«PyWat. А хорошо ли вы знаете Python?» Александр Швец, Marilyn System
«PyWat. А хорошо ли вы знаете Python?» Александр Швец, Marilyn System«PyWat. А хорошо ли вы знаете Python?» Александр Швец, Marilyn System
«PyWat. А хорошо ли вы знаете Python?» Александр Швец, Marilyn System
 
«(Без)опасный Python», Иван Цыганов, Positive Technologies
«(Без)опасный Python», Иван Цыганов, Positive Technologies«(Без)опасный Python», Иван Цыганов, Positive Technologies
«(Без)опасный Python», Иван Цыганов, Positive Technologies
 
«Python of Things», Кирилл Борисов, Яндекс
«Python of Things», Кирилл Борисов, Яндекс«Python of Things», Кирилл Борисов, Яндекс
«Python of Things», Кирилл Борисов, Яндекс
 
«Как сделать так, чтобы тесты на Swift не причиняли боль» Сычев Александр, Ra...
«Как сделать так, чтобы тесты на Swift не причиняли боль» Сычев Александр, Ra...«Как сделать так, чтобы тесты на Swift не причиняли боль» Сычев Александр, Ra...
«Как сделать так, чтобы тесты на Swift не причиняли боль» Сычев Александр, Ra...
 
«Клиенту и серверу нужно поговорить» Прокопов Никита, Cognician
«Клиенту и серверу нужно поговорить» Прокопов Никита, Cognician«Клиенту и серверу нужно поговорить» Прокопов Никита, Cognician
«Клиенту и серверу нужно поговорить» Прокопов Никита, Cognician
 
«Кошелек или деньги: сложный выбор между памятью и процессором» Алексеенко Иг...
«Кошелек или деньги: сложный выбор между памятью и процессором» Алексеенко Иг...«Кошелек или деньги: сложный выбор между памятью и процессором» Алексеенко Иг...
«Кошелек или деньги: сложный выбор между памятью и процессором» Алексеенко Иг...
 

Извлечение информации из веб-страниц - Михаил Коробов, PyCon RU 2014

  • 2. План • Скачать страницу • Вытащить информацию
  • 3. Скачать страницу • wget / curl • urllib • requests • twisted / tornado / gevent / ... • scrapy / ...
  • 10. Получение информации из HTML • re (регулярные выражения) • XPath селекторы • CSS3 селекторы • jquery селекторы • parsley селекторы • ...
  • 11. Не пишем селекторы • Scrapely (https://github.com/scrapy/scrapely) • Portia (https://github.com/scrapinghub/portia)
  • 13. Сложные случаи: много сайтов, все разные; структура сайта неизвестна заранее.
  • 14. Задачи • Обход сайта • Извлечение информации
  • 15. Обход сайта: обычно - правила • Переходить по ссылкам /contact, /about и т.д. (в зависимости от задачи); • переходить по ссылкам, ведущим на тот же домен; • ограничения на глубину переходов; • ограничения на общее количество переходов; • ... • паджинация? • формы поиска?
  • 16. Извлечение информации • Правила / регекспы работают неплохо для телефонов, факсов и т.д. • Правила работают хуже для более сложных задач: имена людей, названия организаций и т.д. • В науке задача известна как Named Entity Recognition (NER).
  • 17. Named Entity Recognition Для английского языка часто решается с помощью машинного обучения 1. Определяем, что именно хотим найти. 2. Размечаем веб-страницы вручную. 3. Тренируем модель на размеченных данных. 4. Извлекаем информацию из новых веб-страниц.
  • 18. Named Entity Recognition Для английского языка часто решается с помощью машинного обучения 1. Определяем, что именно хотим найти.1 2. Размечаем веб-страницы вручную. 3. Тренируем модель на размеченных данных. 4. Извлекаем информацию из новых веб-страниц.
  • 19. 1. Примеры именованных сущностей • название организации • имя человека • должность человека • адрес (дом, улица и т.д.) • город • штат, провинция, область • страна • телефон • факс • время работы
  • 20. 1. Примеры именованных сущностей • название организации - ORG • имя человека - PER • должность человека - FUNC • адрес (дом, улица и т.д.) - STREET • город - CITY • штат, провинция, область - STATE • страна - COUNTRY • телефон - TEL • факс - FAX • время работы - HOURS
  • 21. Named Entity Recognition Для английского языка часто решается с помощью машинного обучения 1. Определяем, что именно хотим найти. 2. Размечаем веб-страницы вручную.1 3. Тренируем модель на размеченных данных. 4. Извлекаем информацию из новых веб-страниц.
  • 22. 2. Инструменты для ручной разметки • https://github.com/xtannier/WebAnnotator • https://gate.ac.uk/ • http://brat.nlplab.org/
  • 24. Named Entity Recognition Для английского языка часто решается с помощью машинного обучения 1. Определяем, что именно хотим найти. 2. Размечаем веб-страницы вручную. 3. Тренируем модель на размеченных данных.1 4. Извлекаем информацию из новых веб-страниц.
  • 25. 3. Приводим задачу к виду, удобному для машинного обучения • Веб-страница => последовательность токенов; • для каждого токена сохраняем информацию о том, где он расположен в HTML; • каждому токену присваиваем метку. Инструмент: https://github.com/scrapinghub/webstruct
  • 26. Одна именованная сущность - это один или несколько токенов ORG © Old Tea Cafe All Rights Reserved Для машинного обучения - сложно и неудобно
  • 27. IOB-кодирование • Токенам "вне" именованных сущностей - тег O1 • Первому токену сущности - тег B-ENTITY1 • Всем остальным токенам сущности - тег I-ENTITY I-ORGB-ORG © Old Tea Cafe All Rights Reserved O O OOI-ORG
  • 28. Свели задачу к "стандартной" задаче классификации • Входные данные - информация о токене (фичи) • Предсказание - метка, закодированная IOB • ... + одна тонкость - чтоб улучшить качество предсказания, используют классификаторы, учитывающие последовательность меток (обычно это Conditional Random Fields)
  • 29. Примеры фич • токен == "Cafe"? • первая буква - заглавная? • токен - это название месяца? • предыдущие два токена - "© 2014"? • токен - внутри html-элемента <title>? • токен - последний в своем html-элементе?
  • 30. Собираем все вместе (один из вариантов) • Размечаем веб-странички с помощью WebAnnotator • Используем WebStruct, чтобы загрузить тренировочные данные, закодировать сущности в IOB • Пишем функции извлечения фич (и/или используем готовые из WebStruct) • Тренируем CRF-модель с помощью python-crfsuite • С помощью WebStruct соединяем все вместе
  • 31. Недостатки • Нужно достаточно много тренировочных данных (хорошо бы несколько сотен страниц) • 100% точности достичь невозможно • Если фичи извлекаются питоньими функциями, и их много, то это не очень быстро (5-20 страниц в секунду)
  • 32. Достоинства • Работает; • понятно, как улучшать; • понятно, как адаптировать к новой предметной области; • часть работы (разметка тренировочных данных) может быть выполнена непрограммистом.
  • 33. Советы • Понимать, что происходит внутри; • не действовать "вслепую", не воспринимать все как черный ящик • пройти курсы на Coursera / ... • почитать книжки.