Веб-скрапинг — это мощная техника, которая позволяет разработчикам автоматически извлекать данные с веб-сайтов. Он имеет множество вариантов использования, включая конкурентный анализ, интеллектуальный анализ данных и агрегацию контента. Django — это популярная веб-инфраструктура для создания веб-приложений, а Scrapy — мощная платформа для очистки веб-страниц. В этой статье мы рассмотрим, как объединить Django и Scrapy для создания парсеров, которые можно интегрировать в приложения Django.
Во-первых, давайте начнем с настройки нового проекта Django. Мы создадим новое приложение Django с именем «scrapers» и установим Scrapy в качестве зависимости. Вот как это сделать:
# create a new Django project django-admin startproject myproject # create a new Django app python manage.py startapp scrapers # install Scrapy pip install scrapy
Далее мы создадим новый паук Scrapy, который будет очищать данные с веб-сайта. В этом примере мы будем собирать данные с веб-сайта Hacker News. Вот код нашего паука Scrapy:
import scrapy class HackerNewsSpider(scrapy.Spider): name = "hacker_news" start_urls = [ "https://news.ycombinator.com/" ] def parse(self, response): for article in response.css("tr.athing"): yield { "title": article.css("a.storylink::text").get(), "url": article.css("a.storylink::attr(href)").get(), "votes": int(article.css("span.score::text").re_first(r"\d+")) } next_page = response.css("a.morelink::attr(href)").get() if next_page is not None: yield response.follow(next_page, self.parse)
Этот паук будет извлекать заголовок, URL-адрес и количество голосов для каждой статьи на главной странице Hacker News. Он также перейдет по ссылке «Дополнительно» внизу страницы, чтобы очистить дополнительные страницы.
Теперь, когда у нас есть наш паук Scrapy, нам нужно интегрировать его в наше приложение Django. Мы создадим представление Django, которое запустит паука Scrapy и вернет очищенные данные. Вот код нашего представления Django:
from django.http import JsonResponse from scrapy.crawler import CrawlerProcess from scrapers.spiders.hacker_news_spider import HackerNewsSpider def scrape_hacker_news(request): process = CrawlerProcess(settings={ "FEEDS": { "items.json": {"format": "json"}, }, }) process.crawl(HackerNewsSpider) process.start() with open("items.json", "r") as f: data = f.read() return JsonResponse(data, safe=False)
Это представление запустит паука Scrapy и сохранит очищенные данные в файл JSON. Затем он прочитает файл JSON и вернет данные в виде ответа JSON.
Наконец, мы создадим URL-маршрут Django, который будет отображаться в нашем новом представлении. Вот код для нашего URL-маршрута Django:
from django.urls import path from .views import scrape_hacker_news urlpatterns = [ path("scrape-hacker-news/", scrape_hacker_news, name="scrape_hacker_news"), ]
Теперь мы можем перейти по URL-адресу «/scrape-hacker-news/» в нашем приложении Django, чтобы запустить паука Scrapy и вернуть очищенные данные в виде ответа JSON.
В заключение, объединение Django и Scrapy может стать мощным способом создания парсеров, которые можно интегрировать в приложения Django. Следуя шагам, описанным в этой статье, вы сможете легко создавать парсеры, которые извлекают данные с веб-сайтов и возвращают результаты в виде ответов JSON.