CoderCastrov logo
CoderCastrov
Парсер

Легкий способ веб-парсинга с Django и Scrapy

Легкий способ веб-парсинга с Django и Scrapy
просмотров
2 мин чтение
#Парсер
Generated by Dall-E 2

Веб-парсинг - это мощная техника, которая позволяет разработчикам автоматически извлекать данные с веб-сайтов. У него есть множество применений, включая конкурентный анализ, добычу данных и агрегацию контента. Django - популярный веб-фреймворк для создания веб-приложений, а Scrapy - мощный фреймворк для веб-парсинга. В этой статье мы рассмотрим, как объединить Django и Scrapy для создания веб-парсеров, которые можно интегрировать в приложения Django.

Сначала давайте начнем с настройки нового проекта Django. Мы создадим новое приложение Django с именем "scrapers" и установим Scrapy в качестве зависимости. Вот как это сделать:

# создать новый проект Django
django-admin startproject myproject
# создать новое приложение Django
python manage.py startapp scrapers
# установить 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. Он также будет переходить по ссылке "More" внизу страницы для парсинга дополнительных страниц.

Теперь, когда у нас есть наш паук 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-ответов.