Вебскрапінг з AutoScraper: покроковий посібник
У цьому туторіалі я проведу вас через налаштування AutoScraper, збирання даних із вебсайтів і збереження їх у CSV-файл для зручного аналізу. Ви побачите, що з AutoScraper вебскрапінг може бути простим і ефективним, допомагаючи зосередитися на аналізі даних, а не на розбиранні коду.
Що таке AutoScraper?
AutoScraper — це бібліотека Python, яка автоматично вивчає структури даних на основі ваших прикладів. Вона використовує поєднання ШІ та евристичного аналізу для виявлення шаблонів на вебсторінці, спрощуючи процес вилучення даних. На відміну від інших бібліотек для вебскрапінгу, таких як BeautifulSoup або Scrapy, які потребують явного кодування шляхів даних, AutoScraper інтерпретує структуру даних і самостійно вчиться витягувати подібні дані.
Основні переваги AutoScraper включають:
- Minimal Code: Надайте приклад даних, які ви хочете зібрати, і AutoScraper подбає про решту.
- Structured Data Handling: Ідеально підходить для вебсайтів із чіткою структурою, як-от списки товарів або інформаційні таблиці.
- Без ручного перегляду HTML: Ідеально підходить для початківців, які не знайомі зі структурою HTML.
Альтернативи AutoScraper для динамічного контенту
Для сайтів із важким JavaScript або захистом CAPTCHA розгляньте використання:
- Selenium: Автоматизує взаємодію з браузером, ідеально підходить для динамічного контенту.
- Splash: Рішення з безголовим браузером і підтримкою JavaScript.
- Web Scraping API: Надає структуровані дані зі складних сайтів, як-от Amazon і LinkedIn.
Prerequisites
Щоб повторювати кроки разом, вам знадобиться:
- 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
source 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.
from autoscraper import AutoScraper
import pandas as 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=True)
print("Ключі, знайдені вебскрапером:", 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.
- Упорядкуйте й збережіть дані
Призначте назви стовпців і впорядкуйте дані в 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)
print("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.
urls = [f"http://books.toscrape.com/catalogue/page-{i}.html" for i in range(1, 3)]
Збирайте дані між сторінками
Пройдіть по кожному URL сторінки та накопичуйте дані.
all_data = []
for page_url in urls:
results = scraper.get_result_similar(page_url, grouped=True)
data = {columns[i]: results[list(results.keys())[i]] for i in range(len(columns))}
all_data.append(pd.DataFrame(data))
full_data = pd.concat(all_data, ignore_index=True)
full_data.to_csv('books_data_paginated.csv', index=False)
Використання 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=True)
# Define columns based on rules and organize data
columns = ["Title", "Year", "Rating"]
data = {columns[i]: results[list(results.keys())[i]] for i in range(len(columns))}
df = pd.DataFrame(data)
df.to_csv('movies_data.csv', index=False)
Типові виклики під час роботи з AutoScraper
Попри простоту AutoScraper, можуть виникнути певні труднощі:
JavaScript-Rendered Pages: AutoScraper не працює з JavaScript, тож для таких сайтів вам можуть знадобитися інструменти на кшталт Selenium або Playwright.
Rate Limiting: Часті запити можуть спричиняти обмеження частоти запитів, тож використовуйте такі бібліотеки, як ratelimit, щоб розподіляти запити в часі.
IP Blocking: Для вебскрапінгу з високим трафіком використовуйте проксі-сервери, щоб уникнути IP-блокувань. Ось як налаштувати проксі в AutoScraper:
request_args = {
"headers": {
"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)
Conclusion
AutoScraper — це простий інструмент, який полегшує вебскрапінг даних зі статичних сайтів, навіть якщо ви новачок у програмуванні або не знайомі з HTML. Тут я розібрав основи — як встановити та налаштувати його, працювати з пагінацією та скрапити складніші сайти. Хоч AutoScraper може бути не найкращим вибором для кожного завдання вебскрапінгу, він ідеально підходить для швидкого збирання даних без крутої кривої навчання.
Якщо ви працюєте з сайтами, насиченими JavaScript, або з сайтами, що використовують CAPTCHA, розгляньте можливість поєднати AutoScraper із Selenium або перейти на більш просунутий інструмент, наприклад Bright Data. Усе залежить від того, що саме ви намагаєтеся зібрати під час вебскрапінгу, і від структури сайту.

