Овладение веб-скрапингом с помощью BeautifulSoup

Мастерство веб-скрапинга с Beautiful Soup

 

“Компьютеры – это велосипеды для нашего разума”, – как-то заметил Стив Джобс. Представьте себе педалирование сквозь живописный ландшафт Веб-Скрапинга с ChatGPT в качестве вашего гида.

Помимо своих других отличных возможностей, ChatGPT может стать вашим проводником и спутником в изучении любой темы, включая Веб-Скрапинг. И помните, мы не просто говорим о изучении Веб-Скрапинга; мы говорим о переосмыслении того, как мы его учимся.

Приготовьтесь к разделам, которые соединяют любопытство с кодом и объяснениями. Приступим.

 

Как научиться Веб-Скрапингу с помощью ChatGPT?

 

Здесь нам нужен отличный план. Веб-Скрапинг может служить вам при выполнении оригинальных проектов по науке о данных, которые привлекут работодателей и могут помочь вам найти работу мечты. Или вы даже можете продавать полученные данные. Но прежде всего вам следует составить план. Давайте рассмотрим, о чем я говорю.

 

Сначала сделаем план

 

Альберт Эйнштейн однажды сказал: “Если у меня был бы час, чтобы решить проблему, я бы потратил 55 минут на обдумывание проблемы и 5 минут на обдумывание решений”. В этом примере мы последуем его логике.

Чтобы научиться Веб-Скрапингу, сначала вам следует определиться, с какой библиотекой для программирования вы собираетесь работать. Например, если вы хотите изучить Python для науки о данных, вы можете разделить его на следующие подразделы:

  • Веб-Скрапинг
  • Исследование и анализ данных
  • Визуализация данных
  • Машинное обучение

Подобным образом мы можем разделить Веб-Скрапинг на подразделы перед тем, как выбрать конкретное направление. У нас все еще остается много времени. Вот несколько библиотек для Веб-Скрапинга:

  • Requests
  • Scrapy
  • BeautifulSoup
  • Selenium

Отлично, допустим, вы выбрали BeautifulSoup. Я бы советовал вам составить отличную таблицу содержания. Вы можете взять эту таблицу из книги, которую нашли в Интернете. Давайте представим, что первые два раздела вашей таблицы содержания будут выглядеть так:

Название: Овладение Веб-Скрапингом с BeautifulSoup

Содержание

Раздел 1: Основы Веб-Скрапинга

  • Введение в Веб-Скрапинг
  • Начало работы с Python и BeautifulSoup
  • Понимание HTML и структуры DOM

Раздел 2: Настройка и основные техники

  • Настройка среды для Веб-Скрапинга
  • Основные техники работы с BeautifulSoup

Также, пожалуйста, не ищите вышеупомянутую электронную книгу, так как я создал ее только для этого примера.

Теперь у вас есть таблица содержания. Пришло время следовать вашему ежедневному графику обучения. Допустим, сегодня вы хотите изучить Раздел 1. Вот промпт, который вы можете использовать:

Действуйте как преподаватель Python и объясните мне следующие подразделы, используя примеры кода. Поддерживайте разговорный тон и подходящий для уровня 9-го класса, предполагая, что я совершенно новичок. После каждого подраздела спрашивайте, понял ли я основные концепции и есть ли у меня вопросы. Раздел 1: Основы Веб-Скрапинга Введение в Веб-Скрапинг Начало работы с Python и BeautifulSoup Понимание HTML и структуры DOM"

 

 

Вот первая часть вывода ChatGPT. Он объясняет концепции, как будто вы – новичок, предоставляет примеры кода и задает вопросы, чтобы проверить ваше понимание, что здорово. Давайте теперь посмотрим остальную часть ответа.

 

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

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

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

Отладка вашего кода

Иногда отладка может быть действительно сложной и затратной по времени, и если вы неправильно написали код, вы можете потратить на него много времени, как показано в приведенном ниже коде.

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

import requestsfrom bs4 import BeautifulSoupdef scrape_quotes():    page = 1    while True:        # Этот URL не будет меняться с номером страницы, что приводит к ошибке.        url = "https://quotes.toscrape.com/page/1/"        response = requests.get(url)        if response.ok:            soup = BeautifulSoup(response.text, 'html.parser')            quotes = soup.find_all('span', class_='text')            if quotes:                for quote in quotes:                    print(quote.text)            else:                # Это условие никогда не будет истинным, так как 'quotes' не будет пустым.                print("Цитаты для извлечения больше нет.")                break            # Переменная page увеличивается, но не используется в URL.            page += 1        else:            print(f"Не удалось получить веб-страницу, код состояния: {response.status_code}")            breakscrape_quotes()

Вы можете обнаружить ошибку в коде? Если нет, ничего страшного; я думаю, что помимо экспертов, мало кто может справиться с этим.

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

Эта ошибка означала, что несмотря на увеличение переменной page, наш скрипт по-прежнему запрашивал одну и ту же страницу, попадая в бесконечный цикл.

Вот здесь все, что вам нужно сделать, это использовать следующую подсказку для отладки вашего кода.

Отладьте этот код.

И вуаля! Он мгновенно отладит ваш код и предоставит вам последнюю версию.

import requestsfrom bs4 import BeautifulSoupdef scrape_quotes():    page = 1    while True:        url = f"https://quotes.toscrape.com/page/{page}/"  # Теперь URL обновляется с номером страницы.        response = requests.get(url)        if response.ok:            soup = BeautifulSoup(response.text, 'html.parser')            quotes = soup.find_all('span', class_='text')            if quotes:                for quote in quotes:                    print(quote.text)            else:                print("Цитаты для извлечения больше нет.")                break            page += 1  # Увеличиваем номер страницы.        else:            print(f"Не удалось получить веб-страницу, код состояния: {response.status_code}")            breakscrape_quotes()

Результат будет содержать все цитаты с веб-сайта.

Улучшите свой код

Допустим, вы хотите извлечь цитаты с веб-сайта выше.

Вот код.

import requestsfrom bs4 import BeautifulSoupimport timedef scrape_quotes_longer():    page = 1    all_quotes = []    while True:        try:            response = requests.get(f"https://quotes.toscrape.com/page/{page}/", timeout=5)            if not response.ok:                break            soup = BeautifulSoup(response.text, 'html.parser')            quotes = soup.find_all('span', class_='text')            for quote in quotes:                all_quotes.append(quote.text)            # Простая проверка наличия кнопки 'next'            next_btn = soup.select_one('li.next > a')            if not next_btn:                break            page += 1            time.sleep(2)  # Приостановить выполнение на 2 секунды между запросами        except requests.RequestException as e:            print(f"Не удалось выполнить запрос: {e}")            break    return all_quotesquotes = scrape_quotes_longer()for q in quotes:    print(q)

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

Вы можете использовать следующее подсказку, которая простая, но мощная.

Улучшите этот код.

Теперь давайте рассмотрим новый код, который предлагает ChatGPT.

import requestsfrom bs4 import BeautifulSoupfrom requests.exceptions import RequestExceptionfrom time import sleepdef scrape_quotes_improved():    page = 1    all_quotes = []    headers = {'User-Agent': 'Mozilla/5.0'}        while True:        url = f"https://quotes.toscrape.com/page/{page}/"        try:            response = requests.get(url, headers=headers, timeout=5)            response.raise_for_status()  # Will raise an HTTPError if the HTTP request returned an unsuccessful status code                        soup = BeautifulSoup(response.text, 'html.parser')            quotes = [quote.text for quote in soup.find_all('span', class_='text')]            if not quotes:                break            all_quotes.extend(quotes)                        next_btn = soup.select_one('li.next > a')            if not next_btn:                break  # No more pages                        page += 1            sleep(1)  # More reasonable delay        except RequestException as e:            print(f"Request failed: {e}")            break    return all_quotesquotes = scrape_quotes_improved()for q in quotes:    print(q)

Вывод будет тем же, но вот улучшения, которые сделал ChatGPT.

Как вы можете видеть, это действительно мощно.

Применение в более сложных случаях

Здесь вы можете попробовать автоматизировать весь процесс парсинга веб-сайтов, загрузив HTML-файл с веб-страницы, которую вы хотите разобрать, и отправив HTML-документ в ChatGPT Advanced Data Analysis, добавив файл.

Давайте посмотрим на примере. Вот веб-сайт IMDB website, который содержит топ-100 фильмов согласно рейтингу пользователей IMDB, но в конце этой веб-страницы не забудьте щелкнуть “50 еще”, чтобы отобразилось все 100 фильмов.

После этого загрузите html-файл, нажав правой кнопкой мыши на веб-странице, затем выберите “Сохранить как” и выберите html-файл. Теперь у вас есть файл, откройте ChatGPT и выберите advanced data analysis.

Теперь пришло время добавить файл, который вы скачали (HTML-файл), сначала добавьте файл, затем используйте указание ниже.

Сохраните топ 100 фильмов IMDb, включая название фильма, рейтинг IMDb. Затем отобразите первые пять строк. Кроме того, сохраните этот фрейм данных в формате CSV и отправьте его мне.

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

Чтобы воспользоваться этой функцией, нажмите правой кнопкой мыши на веб-странице и выберите “Инспектировать”, здесь вы можете увидеть элементы HTML.

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

Итоги

Мы изучили парсинг веб-страниц с помощью ChatGPT. Планирование, отладка и усовершенствование кода вместе с AI оказались не только продуктивными, но и просветительскими. Это диалог с технологией, ведущий нас к новым идеям.

Как вы уже знаете, Data Science, такой как парсинг веб-страниц, требует практики. Это похоже на ремесло. Записывайте код, делайте исправления и снова кодируйте — это мантра начинающих data scientist, стремящихся пр leave свой след.

Готовы к практическому опыту? Платформа StrataScratch – ваша арена. Вступайте в проекты с данными, разрешайте задачи на собеседованиях и присоединяйтесь к сообществу, которое поможет вам расти. Увидимся там!

****[Nate Rosidi](https://twitter.com/StrataScratch)**** – это дата-сайентист и стратег в продукте. Он также преподает аналитику в качестве совместного профессора и является основателем StrataScratch, платформы, которая помогает дата-сайентистам готовиться к интервью с реальными вопросами от ведущих компаний. Свяжитесь с ним на Twitter: StrataScratch или LinkedIn.