А… Веб-скрапинг. Я уверен, что вы слышали об этом и, вероятно, сделали это или, по крайней мере, думали об этом.
Я делал это более чем много раз. Черт возьми, несколько месяцев назад я проводил презентацию на местной конференции по науке о данных на тему использования науки о данных для анализа рынка недвижимости.
Первые 30 слайдов были посвящены поиску в Интернете, и о том, как я нашел на самом популярном местном сайте купли-продажи подробную информацию о квартирах. И в аудитории был этот парень, который представился во время секции вопросов и ответов в конце презентации, и он был одним из менеджеров этого сайта.
Ой.
Разумеется, разговор был не из приятных. Итак, суть этого - осторожно используйте очистку веб-страниц, это может очень быстро вызвать у вас проблемы.
«Так почему я должен вообще подумать о парсинге веб-страниц?»
Я рада, что вы спросили. Основная причина в том, что в реальном мире трудно найти хороший набор данных - иногда проще создать его самостоятельно.
Как и в моем случае, были некоторые наборы данных о ценах на жилье, но ни один из них не был связан со страной, в которой я живу, и уж тем более не связан с моим городом. Веб-скрапинг был единственным выходом.
Еще один хороший аргумент, почему вам следует подумать о парсинге веб-страниц, заключается в следующем: это весело! Конечно, вы ударите себя по голове, пока не выучите правильный синтаксис, но через несколько раз это действительно станет приятный процесс.
«Хорошо, хорошо, уже к делу!»
Этого достаточно для введения и основных рассуждений.
Прежде чем приступить к парсингу веб-страниц, обязательно ознакомьтесь с этой замечательной статьей Этика парсинга веб-сайтов.
А теперь давайте перейдем к хорошему.
Поиск веб-сайта для очистки
Ранее сегодня я изо всех сил пытался найти приличную страницу, с которой можно было бы почистить. Не то чтобы их нет - наверняка есть - но, как бы вы сказали, это не самая легальная вещь для меня, например, показывать вам, как очищать статьи из CNN.
Затем я наткнулся на эту страницу - Книги, которые нужно очистить - это буквально лучшее место, чтобы показать, как работает очистка, и никто не рассердится.
Когда вы откроете эту страницу, вы увидите проводник по темам с левой стороны, и когда вы нажмете на любой из них, вы будете перенаправлены на веб-страницу, содержащую книги по этой теме.
Плавно!
При нажатии на «Путешествие» URL-адрес изменится на:
http://books.toscrape.com/catalogue/category/books/travel_2/index.html
Я действительно не знаю, почему им понадобилось добавить «_2», но это то, что есть. Щелкнув по нескольким категориям тем, я получил следующий список:
- travel_2
- тайна_3
- музыка_14
- поэзия_23
- юмор_30
Это, как вы, наверное, догадались, список тем, по которым я получу книги. Вот как выглядит первая книга из серии «Путешествия»:
Так выглядит каждая книга, а это значит, что у меня должен быть какой-то способ получить данные о достопримечательностях, а именно:
- Тема
- Заголовок
- Рейтинг
- Цена
- Доступность
- URL книги
- URL-адрес эскиза
Шаг 1. Найдите HTML-теги и их классы
Подождите, что? Мне нужно знать HTML?
Совсем чуть-чуть. Вам достаточно знать самые простые теги HTML - их легко можно использовать в Google, - поэтому я не буду тратить на это время.
Теперь откройте эту ссылку, чтобы увидеть все книги в категории Путешествия. Нажмите CTRL + SHIFT + I, чтобы запустить консоль разработчика. Здесь вы можете просмотреть и изучить любой HTML-тег.
Я пошел дальше, щелкнув одну из книг правой кнопкой мыши и нажав Проверить. Итак, теперь консоль разработчика выглядит так:
Вы видите этот тег article? Это базовый уровень для этого процесса парсинга. В этом теге находится каждый для получения данных по 7 пунктам, перечисленным выше. Вы можете найти их, щелкнув значки в виде стрелок, чтобы развернуть определенный тег.
Если вам не хочется углубляться в детали, вот список:
- Заголовок: h3 - ›a (свойство title)
- Ссылка на книгу: div (class image_container) - ›a (свойство href)
- Миниатюра книги: div (класс image_container) - ›img (свойство src)
- Рейтинг: p (class star-rating) - ›(свойство class) - последний элемент
- Цена: div (class product_price) - ›p (class price_color)
- Доступность: div (класс product_price) - ›p (класс наличие на складе)
- Тема - будет извлечена из URL.
Ладно, теперь ты все знаешь! Ну, кроме того, как поместить это в осмысленный код. Об этом следующий раздел.
Шаг 2. Написание скрипта парсинга
Вот краткое изложение идеи. Вам нужно написать сценарий, который:
- Принимает в качестве аргумента список тем
- Создает список полных URL-адресов на основе предоставленного аргумента темы
- Открывает каждый URL-адрес и извлекает эти 7 интересных мест для каждой книги по теме
- Сохраняет результаты в словарь
- Предоставляет пользователю основную информацию о том, что происходит
- Возвращает представление Pandas DataFrame заполненного словаря
«Но это просто похоже на много работы…»
Я знаю, поверьте мне. Я написал сценарии для получения более 100 атрибутов, так что этот для меня не был большой проблемой, но, возможно, он подойдет вам, если вы впервые.
К счастью, идея всегда одна и та же. Теги и классы изменятся, но идея останется прежней.
О, я почти забыл предоставить вам необходимый импорт (facepalm). Они здесь:
import datetime import numpy as np import pandas as pd from collections import OrderedDict import requests from bs4 import BeautifulSoup
Я собираюсь похлопать тебя со всем сценарием - сначала это может показаться устрашающим, но я верю в тебя:
Я действительно постарался объяснить каждую строчку кода. Теперь вам нужно углубиться в сценарий и понять, почему все работает именно так (предупреждение о спойлере: это действительно не так уж и сложно).
Шаг 3. Наслаждайтесь результатами
Теперь самое простое в мире - запустить этот скрипт и сохранить результаты в переменной:
Это было быстро. На извлечение большего количества контента с крупных веб-сайтов иногда уходит несколько часов, так что не привыкайте к тому, что время до завершения составляет 0 секунд.
Теперь вы можете проверить, как выглядит только что созданный DataFrame:
Заключительные слова
Поздравляю. Вы только что приобрели новый навык. Я бы сказал, что фундаментальный для любого начинающего специалиста по данным. Но помни это,
С большой силой приходит большая ответственность - Бен Паркер, Человек-паук
так что используйте свой новый навык с умом и не навлекайте на себя неприятности.
До скорого…