Веб-скрейпинг с AutoScraper

Веб-скрейпинг с помощью AutoScraper: Пошаговое руководство

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

Что такое AutoScraper?

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

К основным преимуществам AutoScraper относятся:

  • Minimal Code: Предоставьте пример данных, которые вы хотите извлечь, и AutoScraper позаботится обо всем остальном.
  • Structured Data Handling: Подходит для сайтов с чёткой структурой, например для списков товаров или информационных таблиц.
  • Ручной анализ HTML не требуется: Идеально подходит для начинающих, не знакомых со структурой HTML.

Альтернативы AutoScraper для динамического контента

Для сайтов с обилием JavaScript или CAPTCHA-защитой стоит рассмотреть:

  • Селен: Автоматизирует взаимодействие с браузером, идеально подходит для динамического контента.
  • Всплеск: Решение на базе headless-браузера с поддержкой JavaScript.
  • Web Scraping API: Предоставляет структурированные данные со сложных сайтов вроде Amazon и LinkedIn.

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

Чтобы повторять шаги вместе со мной, вам понадобятся:

  • Python 3+: Убедитесь, что у вас установлена последняя версия Python.
  • AutoScraper: Установка через pip (pip install autoscraper).
  • Pandas: Для сохранения данных в CSV-файл (pip install pandas).

Let’s begin by setting up our environment.

Настройка проекта

Начните с создания каталога проекта и настройки виртуального окружения.

# Create project directory
mkdir web_scraping_tutorial
cd web_scraping_tutorial
# Set up virtual environment
python -m venv env
источник env/bin/activate # for MacOS/Linux users
env\Scripts\activate # for Windows users

Затем установите необходимые библиотеки:

pip install autoscraper pandas

Выбор сайта для скрейпинга

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

Создание скрейпера

Let’s jump into code to build our first scraper with AutoScraper.

Import Libraries

Сначала импортируйте AutoScraper и Pandas.

с сайта autoscraper импорт AutoScraper
импорт панды в роли pd

Определите целевой URL и пример данных

Мы зададим URL и предоставим образцы данных, которые AutoScraper будет использовать для выявления закономерностей. Здесь мы извлекаем названия книг, цены и рейтинги.

url = "http://books.toscrape.com/"
wanted_list = ["A Light in the Attic", "£51.77", "Three"]

The wanted_list contains example data from the website. AutoScraper will learn from these values to find similar data.

Создайте скрейпер

Now, create an instance of the scraper and use the build method to scrape the page based on the examples in wanted_list.

scraper = AutoScraper()
scraper.build(url, wanted_list)

Проверка результатов

Проверьте, что именно извлек AutoScraper, чтобы убедиться, что он собирает нужные данные.

results = scraper.get_result_similar(url, grouped=Правда)
печать("Ключи, найденные скрейпером:", results.keys())

AutoScraper will display a set of rules it generated. You’ll see keys like rule_0xs7 and rule_1dmx that store extracted data.

  1. Организуйте и сохраните данные

Присвойте названия столбцам и организуйте данные в DataFrame библиотеки Pandas.

columns = ["Title", "Price", "Rating"]
data = {columns[i]: results[list(results.keys())[i]] for i in range(len(columns))}
df = pd.DataFrame(data)

Сохраните данные в CSV

Наконец, сохраните DataFrame в CSV-файл.

df.to_csv('books_data.csv', index=False)
печать("Data saved to books_data.csv")

Теперь у вас есть CSV-файл, содержащий названия книг, цены и оценки с сайта.

Scraping Paginated Content

Сайты с несколькими страницами, то есть с пагинацией, представляют сложность для веб-скрейпинга. Например, у Books to Scrape несколько страниц со списками книг. Вот как расширить AutoScraper для обработки пагинации.

Обновите URL и образцы данных

Define the URL pattern for each page and update wanted_list to reflect sample data from multiple pages.

урлы = [f"http://books.toscrape.com/catalogue/page-{i}.html" for i in range(1, 3)]

Собирайте данные со всех страниц

Пройдитесь по каждому URL страницы и соберите данные.

all_data = []
для page_url в urls:
results = scraper.get_result_similar(page_url, grouped=Правда)
data = {columns[i]: results[list(results.keys())[i]] для i в ассортимент(len(columns))}
all_data.append(pd.DataFrame(data))
full_data = pd.concat(all_data, ignore_index=Правда)
full_data.to_csv('books_data_paginated.csv', index=Ложь)

Использование AutoScraper для сложных сайтов

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

Задайте URL и образцы данных

Set up the target URL and wanted_list using sample data from the movie listing page.

url = "https://sample-movie-site.com/movies"
wanted_list = ["Inception", "2010", "8.8"]

Обучение и отсечение правил

Обучите AutoScraper, а затем удалите ненужные правила.

scraper.build(url, wanted_list)
rules_to_keep = ['rule_1kq7', 'rule_a5xp', 'rule_9vbn'] # Sample rule names for data columns
scraper.keep_rules(rules_to_keep)
scraper.save('movies_model.json')

Извлеките данные с помощью обученной модели

После обучения и сохранения модели извлекайте данные со страниц со схожей структурой.

scraper.load('movies_model.json')
results = scraper.get_result_similar(url, grouped=Правда)
# Define columns based on rules and organize data
columns = ["Title", "Year", "Rating"]
data = {columns[i]: results[list(results.keys())[i]] для i в ассортимент(len(columns))}
df = pd.DataFrame(data)
df.to_csv('movies_data.csv', index=Ложь)

Типичные проблемы при работе с AutoScraper

Несмотря на простоту AutoScraper, могут возникнуть некоторые сложности:

JavaScript-Rendered Pages: AutoScraper не поддерживает JavaScript, поэтому для таких сайтов вам могут понадобиться инструменты вроде Selenium или Playwright.

Rate Limiting: Частые запросы могут привести к срабатыванию rate limits, поэтому используйте библиотеки вроде ratelimit, чтобы замедлять темп запросов.

IP Blocking: Для скрейпинга при больших объемах запросов используйте прокси-серверы, чтобы избежать блокировок по IP. Вот как настроить прокси в AutoScraper:

request_args = {
"заголовки": {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64)"
},
"proxies": {
"http": "http://user:pass@proxyserver:port"
}
}
scraper.build(url, wanted_list=wanted_list, request_args=request_args)

Заключение

AutoScraper — простой инструмент, который упрощает сбор данных со статических сайтов, даже если вы новичок в программировании или не знакомы с HTML. Здесь я разобрал основы: как установить и настроить его, работать с пагинацией и собирать данные с более сложных сайтов. Хотя AutoScraper подходит не для каждой задачи веб-скрейпинга, он отлично подходит для быстрого сбора данных без долгого порога входа.

Если вы работаете с сайтами с большим количеством JavaScript или с CAPTCHA, рассмотрите сочетание AutoScraper с Selenium либо переход на более продвинутый инструмент вроде Bright Data. Все зависит от того, что именно вы пытаетесь собрать, и от структуры сайта.

Похожие записи