темный логотип proxyscrape

Как соскребать таблицы с веб-сайтов - учебник по Python

Как это сделать, Python, Скрапинг, Дек-13-20245 минут чтения

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

В этом практическом руководстве вы шаг за шагом узнаете, как с помощью Python собирать таблицы с веб-сайтов. В конце вы узнаете, как использовать популярные библиотеки, такие как requests, Beautiful Soup и даже pandas, для доступа к табличным данным и их сохранения в форматах, пригодных для повторного использования, таких как CSV-файлы.

Пререквизиты

Прежде чем мы перейдем к техническим деталям, вот что вам понадобится для работы:

  • Убедитесь, что в вашей системе установлен Python. Последнюю версию можно скачать здесь.
  • Необходимые библиотеки:
    • запросы - дляполучения HTML-контента с веб-сайтов. Это популярный пакет для отправки HTTP-запросов в Python.
    • Beautiful Soup -мощная библиотека для разбора HTML- и XML-документов. Мы будем использовать ее для извлечения определенных элементов из нашей веб-страницы.
    • pandas -основная библиотека для манипулирования данными и их анализа в Python. Это будет наш конечный пункт, где мы сохраним извлеченные данные таблицы.

Для установки необходимых библиотек мы воспользуемся командой pip. Просто выполните следующую команду в терминале, чтобы завершить установку:

pip install requests beautifulsoup4 pandas

Пошаговое руководство по скрапбукингу таблиц

Шаг 1: Понимание структуры сайта

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

Вот как эта таблица выглядит в структуре HTML.

Шаг 2: Отправка HTTP-запроса

Первым шагом будет получение веб-страницы, которую вы хотите соскоблить. Мы воспользуемся библиотекой requests, чтобы отправить HTTP-запрос и получить HTML-содержимое с фиктивного сайта, который мы используем для получения содержимого таблицы

url = "https://www.scrapethissite.com/pages/forms/"

response = requests.get(url)

if response.status_code == 200:
   print("Page fetched successfully!")
   html_content = response.text
else:
   print(f"Failed to fetch the page. Status code: {response.status_code}")
   exit()

Шаг 3: Извлечение данных из таблицы

В HTML таблица - это структурированный способ представления данных в виде строк и столбцов, как в электронной таблице. Таблицы создаются с помощью функции <table> тег, а их содержимое разделено на строки (<tr>) и клетки (<td> для ячеек данных или <th> для ячеек заголовка). Вот краткое описание структуры таблицы:

  • Таблица: Закрытый внутри <table> теги, он выступает в качестве контейнера для всех строк и ячеек.
  • Ряды: Каждый <tr> (строка таблицы) представляет собой горизонтальный фрагмент таблицы.
  • Клетки: Внутри каждого ряда, <td> Теги хранят отдельные значения данных (или <th> теги для заголовков).
  • Атрибуты: Таблицы часто имеют классы, идентификаторы или другие атрибуты для их стилизации или идентификации.

Например, в этом сценарии мы находим <table> тег с определенным классом (class="table") и извлеките его строки и ячейки с помощью Прекрасный суп. Это позволяет систематизировать данные и подготовить их для анализа или сохранения.

soup = BeautifulSoup(html_content, "html.parser")

table = soup.find("table", {"class": "table"})

if not table:
   print("No table found on the page!")
   exit()

Шаг 4: Сохранение данных в CSV-файл

В этом шаге мы сохраним извлеченные данные таблицы в CSV-файл для дальнейшего использования, а также отобразим их в виде pandas DataFrame, чтобы вы могли увидеть, как структурированы данные. Сохранение данных в формате CSV позволит вам позже проанализировать их в таких инструментах, как Excel, Google Sheets или сам Python.

headers = [header.text.strip() for header in table.find_all("th")]

rows = []
for row in table.find_all("tr", class_="team"):
   cells = [cell.text.strip() for cell in row.find_all("td")]
   rows.append(cells)

df = pd.DataFrame(rows, columns=headers)

csv_filename = "scraped_table_data_pandas.csv"
df.to_csv(csv_filename, index=False, encoding="utf-8")

print(f"Data saved to {csv_filename}")

Когда вы запустите этот код, pandas создаст файл с именем scraped_table_data.csv в рабочем каталоге, а извлеченные данные будут выведены в консоль следующим образом:

          Название команды Год Выигрыши Проигрыши ОТ Проигрыши Победа % Голы за (GF) Голы против (GA) + / -
0 Бостон Брюинз 1990 44 24 0.55 299 264 35
1 Баффало Сэйбрз 1990 31 30 0.388 292 278 14
2 Калгари Флэймз 1990 46 26 0.575 344 263 81
3 Чикаго Блэкхокс 1990 49 23 0.613 284 211 73
4 Детройт Ред Уингз 1990 34 38 0.425 273 298 -25

Полный код: Скрапирование и сохранение данных таблицы

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

import requests
from bs4 import BeautifulSoup
import pandas as pd

url = "https://www.scrapethissite.com/pages/forms/"

response = requests.get(url)

if response.status_code == 200:
    print("Page fetched successfully!")
    html_content = response.text
else:
    print(f"Failed to fetch the page. Status code: {response.status_code}")
    exit()

soup = BeautifulSoup(html_content, "html.parser")

table = soup.find("table", {"class": "table"})

if not table:
    print("No table found on the page!")
    exit()

headers = [header.text.strip() for header in table.find_all("th")]

rows = []
for row in table.find_all("tr", class_="team"):
    cells = [cell.text.strip() for cell in row.find_all("td")]
    rows.append(cells)

df = pd.DataFrame(rows, columns=headers)

csv_filename = "scraped_table_data_pandas.csv"
df.to_csv(csv_filename, index=False, encoding="utf-8")

print(df.head())
print(f"Data saved to {csv_filename}")

Заключение

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

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

  • Обходите ограничения скорости: Чередуйте IP-адреса, чтобы избежать блокировки сайтов за слишком большое количество запросов.
  • Сохраняйте анонимность: Сохраняйте свою личность, маскируя реальный IP-адрес.
  • Доступ к данным с географическими ограничениями: Используйте прокси-серверы с определенным местоположением, чтобы получить доступ к контенту, специфичному для конкретного региона.

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