温馨提示×

python框架django爬虫如何与Django集成

小樊
81
2024-12-12 05:27:51
栏目: 编程语言

要将Python爬虫与Django集成,您可以按照以下步骤操作:

  1. 创建一个新的Django项目(如果尚未创建):
django-admin startproject myproject
cd myproject
  1. 创建一个新的Django应用:
python manage.py startapp myapp
  1. myapp目录下创建一个名为spiders的文件夹,用于存放爬虫代码。

  2. spiders文件夹中创建一个爬虫类,例如myspider.py。在这个类中,定义您的爬虫逻辑,如下所示:

import scrapy
from myproject.items import MyItem

class MySpider(scrapy.Spider):
    name = 'myspider'
    start_urls = ['http://example.com']

    def parse(self, response):
        item = MyItem()
        # 提取所需数据并将其存储在item对象中
        item['title'] = response.css('h1::text').get()
        yield item
  1. myapp/models.py中定义一个用于存储爬取到的数据的模型,例如:
from django.db import models

class MyItem(models.Model):
    title = models.CharField(max_length=200)
  1. myapp/admin.py中注册模型,以便在Django管理界面中查看和管理爬取到的数据:
from django.contrib import admin
from .models import MyItem

admin.site.register(MyItem)
  1. myproject/settings.py中添加myappINSTALLED_APPS列表:
INSTALLED_APPS = [
    # ...
    'myapp',
]
  1. 创建数据库迁移文件并应用迁移:
python manage.py makemigrations
python manage.py migrate
  1. myproject/urls.py中添加一个URL模式,以便将爬虫的输出(例如CSV文件)保存到Django项目中的文件系统:
from django.urls import path
from myapp.views import save_spider_output

urlpatterns = [
    # ...
    path('save_spider_output/', save_spider_output, name='save_spider_output'),
]
  1. myapp/views.py中创建一个视图函数,用于处理爬虫输出的保存:
import os
from django.http import HttpResponse
from .models import MyItem

def save_spider_output(request):
    output_file = 'spider_output.csv'
    with open(output_file, 'w', newline='', encoding='utf-8') as csvfile:
        fieldnames = MyItem._meta.fields.keys()
        writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
        writer.writeheader()

        items = MyItem.objects.all()
        for item in items:
            row = {
                'title': item.title,
            }
            writer.writerow(row)

    return HttpResponse(f'Spider output saved to {output_file}')
  1. myapp/urls.py中添加一个URL模式,以便访问保存的爬虫输出文件:
from django.urls import path
from .views import save_spider_output, serve_file

urlpatterns = [
    # ...
    path('save_spider_output/', save_spider_output, name='save_spider_output'),
    path('spider_output/<str:filename>/', serve_file, name='serve_file'),
]
  1. myapp/views.py中创建一个视图函数,用于提供爬虫输出的下载:
from django.http import FileResponse
from django.conf import settings
from .models import MyItem

def serve_file(request, filename):
    file_path = os.path.join(settings.MEDIA_ROOT, filename)
    if os.path.exists(file_path):
        return FileResponse(open(file_path, 'rb'), content_type='text/csv')
    else:
        return HttpResponse('File not found', status=404)
  1. myproject/urls.py中包含myapp的URL配置:
from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('myapp.urls')),
]
  1. 创建一个Scrapy项目并将爬虫添加到该项目中。然后,您可以使用scrapy crawl myspider命令运行爬虫。爬取到的数据将存储在Django数据库中,并可以通过访问/save_spider_output/ URL来保存到CSV文件。

  2. 如果需要,您可以在Django管理界面中查看和管理爬取到的数据。

通过以上步骤,您可以将Python爬虫与Django集成,实现数据的爬取、存储和管理。

0