Вебскрапінг із Scrapy: посібник з Python
У цьому підручнику ми покажемо вам, як почати з Scrapy for вебскрапінг і створити свій перший проєкт зі скрапінгу.
Навіщо використовувати Scrapy?
Scrapy швидкий, ефективний і надзвичайно гнучкий у налаштуванні. Він особливо корисний для великомасштабних проєктів вебскрапінгу, де потрібно обходити сотні або тисячі сторінок. Фреймворк створений для продуктивності та одночасно обробляє HTTP-запити й аналізує відповіді.
Альтернативи Scrapy
Якщо ви шукаєте альтернативи Scrapy, я можу порекомендувати 3 провідних провайдерів вебскрапінгу в галузі (я не пов’язаний із жодним із них, не хвилюйтеся):
- Bright Data: Провідний інструмент із розгалуженою мережею проксі та рішеннями.
- OxylabsПросунуте збирання даних із надійними проксі та API.
- Zyte: Зручний вебскрапінг із розумним вилученням даних і підтримкою.
Ключові можливості Scrapy:
- Вбудована підтримка обробки запитів: Робить роботу з кількома сторінками та посиланнями простою.
- Конкурентність і асинхронний ввід-вивід: Ефективна обробка кількох запитів одночасно.
- Підтримка XPath і CSS-селекторів: Потужні способи навігації HTML і вилучення даних.
- Robust API: Дозволяє визначати, як обробляються та зберігаються дані.
Prerequisites
- Basic Python Knowledge: Розуміння основ Python є ключовим.
- Install Scrapy: Скористайтеся pip install scrapy, щоб почати. Переконайтеся, що у вас встановлено Python 3.6+.
Початок роботи з Scrapy
Setting Up Scrapy
Щоб почати використовувати Scrapy, його потрібно встановити. Найпростіший спосіб зробити це — скористатися pip, менеджером пакунків Python.
pip install scrapy
Після встановлення перевірте інсталяцію, ввівши таку команду:
версія Scrapy
Якщо Scrapy встановлено правильно, ця команда поверне номер версії Scrapy.
Створення проєкту Scrapy
Scrapy працює навколо концепції проєктів. Щоб створити свій перший проєкт, перейдіть до каталогу, де має розташовуватися ваш проєкт, і виконайте:
scrapy startproject myproject
Це створить теку з назвою myproject, що міститиме всі необхідні файли для старту.
Структура проєкту
Після створення проєкту ви помітите таку структуру папок:
myproject/
scrapy.cfg # Configuration file
myproject/
__init__.py
items.py # Define the data structure
middlewares.py # Handle middleware logic
pipelines.py # Store the scraped data
settings.py # Project settings
spiders/ # Folder to store your spiders
- items.py: Визначає структуру даних, які ви хочете збирати.
- middlewares.py: Дозволяє змінювати запити та відповіді.
- pipelines.py: Обробляє та зберігає зібрані дані.
- settings.py: Налаштовує поведінку вашого проєкту Scrapy.
- spiders/: Містить код спайдера, де буде вся логіка вебскрапінгу.
Створення вашого першого spider
Spider — це клас у Scrapy, який визначає, як слід виконувати вебскрапінг певного сайту або групи сайтів.
Створення спайдера
To create a spider, navigate to the spiders directory and create a new Python file. Let’s call it quotes_spider.py to scrape data from the famous quotes.toscrape.com website, which is great for beginners.
Ось базова структура для вашого spider:
import scrapy
class QuotesSpider(scrapy.Spider):
name = "quotes"
start_urls = ['http://quotes.toscrape.com']
def parse(self, response):
for quote in response.css('div.quote'):
yield {
'text': quote.css('span.text::text').get(),
'author': quote.css('span small::text').get(),
'tags': quote.css('div.tags a.tag::text').getall(),
}
next_page = response.css('li.next a::attr(href)').get()
if next_page is not None:
yield response.follow(next_page, self.parse)
Let’s break this down:
- name: Це ім’я павука. Scrapy використовує цю назву, щоб визначити, якого павука запускати.
- start_urls: Це список URL-адрес, з яких павук почне вебскрапінг.
- parse(): У цьому методі міститься логіка витягування. Він визначає, як обробляється вміст сторінки. Тут ми використовуємо CSS selectors (response.css), щоб витягнути текст, автора й теги цитат.
- Pagination: Після обробки поточної сторінки павук шукає URL наступної сторінки та переходить за ним, щоб зібрати наступний набір цитат.
Запуск павука
Щоб запустити свій spider, просто скористайтеся такою командою:
scrapy crawl quotes
Scrapy відвідає початковий URL, витягне дані, перейде за посиланнями на наступні сторінки та збере додаткові цитати.
Exporting Scraped Data
Scrapy спрощує експорт зібраних даних. Ви можете експортувати дані у форматах JSON, CSV або XML. Щоб експортувати дані у файл JSON, скористайтеся цією командою:
scrapy crawl quotes -o quotes.json
This command will save the scraped data into quotes.json. Similarly, you can export it in CSV by changing the extension.
Робота з налаштуваннями Scrapy
Scrapy’s behavior can be configured through the settings.py file. Here are some important settings you may want to adjust:
- USER_AGENT: Деякі вебсайти блокують запити без user agent. Ви можете задати user agent вашого павука в налаштуваннях.
USER_AGENT = ‘myproject (+http://www.yourdomain.com)'
- CONCURRENT_REQUESTS: Це налаштування визначає, скільки запитів Scrapy має виконувати одночасно.
CONCURRENT_REQUESTS = 16
- DOWNLOAD_DELAY: Ви можете використовувати затримку між запитами, щоб не перевантажувати сервер.
DOWNLOAD_DELAY = 1 # 1 second delay between requests
Handling Dynamic Content
Багато сучасних вебсайтів використовують JavaScript для динамічного завантаження вмісту, а сам Scrapy не може виконувати JavaScript. У таких випадках ви можете використати Scrapy-Splash або інтегрувати Scrapy з headless-браузером, таким як Selenium.
Using Scrapy-Splash
Splash — це безголовий браузер, створений для вебскрапінгу. Щоб використовувати його, потрібно встановити його, а потім інтегрувати з Scrapy.
Ось як встановити Scrapy-Splash:
pip install scrapy-splash
You also need to update the settings.py file to include:
DOWNLOADER_MIDDLEWARES = {
'scrapy_splash.SplashCookiesMiddleware': 723,
'scrapy_splash.SplashMiddleware': 725,
'scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware': 810,
}
SPIDER_MIDDLEWARES = {
'scrapy_splash.SplashDeduplicateArgsMiddleware': 100,
}
DUPEFILTER_CLASS = 'scrapy_splash.SplashAwareDupeFilter'
HTTPCACHE_STORAGE = 'scrapy_splash.SplashAwareFSCacheStorage'
Інтегрувавши Splash, Scrapy може краще обробляти динамічний контент і отримувати дані з вебсайтів на основі JavaScript.
Пайплайни Scrapy: збереження даних
Після того як ви зберете дані, вам знадобиться спосіб їх зберігати або обробляти. Саме тут у гру вступають pipelines.
Let’s say you want to store the scraped data in a MongoDB database. First, install the pymongo library:
pip install pymongo
Then, create a pipeline in pipelines.py:
import pymongo
class MongoPipeline:
def open_spider(self, spider):
self.client = pymongo.MongoClient("mongodb://localhost:27017/")
self.db = self.client["scrapy_db"]
def close_spider(self, spider):
self.client.close()
def process_item(self, item, spider):
self.db["quotes"].insert_one(dict(item))
return item
Don't forget to activate the pipeline in settings.py:
ITEM_PIPELINES = {
'myproject.pipelines.MongoPipeline': 300,
}
Тепер усі зібрані вами дані зберігатимуться в колекції MongoDB.
Conclusion
Вебскрапінг із Scrapy — це потужний спосіб ефективно витягувати дані з вебсайтів. Від налаштування Scrapy та створення павуків до роботи з динамічним контентом і збереження даних у базі даних, Scrapy пропонує гнучкість як для початківців, так і для досвідчених розробників.
Опанування Scrapy може автоматизувати процеси збирання даних, даючи вам інструменти для збору цінних інсайтів і підтримки ухвалення рішень в індустрії.
Тепер, коли ви розумієте, як працює Scrapy, створіть свій наступний проєкт з вебскрапінгу!

