А… Веб-скрапинг. Я уверен, что вы слышали об этом и, вероятно, сделали это или, по крайней мере, думали об этом.

Я делал это более чем много раз. Черт возьми, несколько месяцев назад я проводил презентацию на местной конференции по науке о данных на тему использования науки о данных для анализа рынка недвижимости.

Первые 30 слайдов были посвящены поиску в Интернете, и о том, как я нашел на самом популярном местном сайте купли-продажи подробную информацию о квартирах. И в аудитории был этот парень, который представился во время секции вопросов и ответов в конце презентации, и он был одним из менеджеров этого сайта.

Ой.

Разумеется, разговор был не из приятных. Итак, суть этого - осторожно используйте очистку веб-страниц, это может очень быстро вызвать у вас проблемы.

«Так почему я должен вообще подумать о парсинге веб-страниц?»

Я рада, что вы спросили. Основная причина в том, что в реальном мире трудно найти хороший набор данных - иногда проще создать его самостоятельно.

Как и в моем случае, были некоторые наборы данных о ценах на жилье, но ни один из них не был связан со страной, в которой я живу, и уж тем более не связан с моим городом. Веб-скрапинг был единственным выходом.

Еще один хороший аргумент, почему вам следует подумать о парсинге веб-страниц, заключается в следующем: это весело! Конечно, вы ударите себя по голове, пока не выучите правильный синтаксис, но через несколько раз это действительно станет приятный процесс.

«Хорошо, хорошо, уже к делу!»

Этого достаточно для введения и основных рассуждений.

Прежде чем приступить к парсингу веб-страниц, обязательно ознакомьтесь с этой замечательной статьей Этика парсинга веб-сайтов.

А теперь давайте перейдем к хорошему.

Поиск веб-сайта для очистки

Ранее сегодня я изо всех сил пытался найти приличную страницу, с которой можно было бы почистить. Не то чтобы их нет - наверняка есть - но, как бы вы сказали, это не самая легальная вещь для меня, например, показывать вам, как очищать статьи из CNN.

Затем я наткнулся на эту страницу - Книги, которые нужно очистить - это буквально лучшее место, чтобы показать, как работает очистка, и никто не рассердится.

Когда вы откроете эту страницу, вы увидите проводник по темам с левой стороны, и когда вы нажмете на любой из них, вы будете перенаправлены на веб-страницу, содержащую книги по этой теме.

Плавно!

При нажатии на «Путешествие» URL-адрес изменится на:

http://books.toscrape.com/catalogue/category/books/travel_2/index.html

Я действительно не знаю, почему им понадобилось добавить «_2», но это то, что есть. Щелкнув по нескольким категориям тем, я получил следующий список:

  • travel_2
  • тайна_3
  • музыка_14
  • поэзия_23
  • юмор_30

Это, как вы, наверное, догадались, список тем, по которым я получу книги. Вот как выглядит первая книга из серии «Путешествия»:

Так выглядит каждая книга, а это значит, что у меня должен быть какой-то способ получить данные о достопримечательностях, а именно:

  1. Тема
  2. Заголовок
  3. Рейтинг
  4. Цена
  5. Доступность
  6. URL книги
  7. URL-адрес эскиза

Шаг 1. Найдите HTML-теги и их классы

Подождите, что? Мне нужно знать HTML?

Совсем чуть-чуть. Вам достаточно знать самые простые теги HTML - их легко можно использовать в Google, - поэтому я не буду тратить на это время.

Теперь откройте эту ссылку, чтобы увидеть все книги в категории Путешествия. Нажмите CTRL + SHIFT + I, чтобы запустить консоль разработчика. Здесь вы можете просмотреть и изучить любой HTML-тег.

Я пошел дальше, щелкнув одну из книг правой кнопкой мыши и нажав Проверить. Итак, теперь консоль разработчика выглядит так:

Вы видите этот тег article? Это базовый уровень для этого процесса парсинга. В этом теге находится каждый для получения данных по 7 пунктам, перечисленным выше. Вы можете найти их, щелкнув значки в виде стрелок, чтобы развернуть определенный тег.

Если вам не хочется углубляться в детали, вот список:

  1. Заголовок: h3 - ›a (свойство title)
  2. Ссылка на книгу: div (class image_container) - ›a (свойство href)
  3. Миниатюра книги: div (класс image_container) - ›img (свойство src)
  4. Рейтинг: p (class star-rating) - ›(свойство class) - последний элемент
  5. Цена: div (class product_price) - ›p (class price_color)
  6. Доступность: div (класс product_price) - ›p (класс наличие на складе)
  7. Тема - будет извлечена из 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:

Заключительные слова

Поздравляю. Вы только что приобрели новый навык. Я бы сказал, что фундаментальный для любого начинающего специалиста по данным. Но помни это,

С большой силой приходит большая ответственность - Бен Паркер, Человек-паук

так что используйте свой новый навык с умом и не навлекайте на себя неприятности.

До скорого…