要将Python爬虫与Django集成,您可以按照以下步骤操作:
django-admin startproject myproject cd myproject python manage.py startapp myapp 在myapp目录下创建一个名为spiders的文件夹,用于存放爬虫代码。
在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 myapp/models.py中定义一个用于存储爬取到的数据的模型,例如:from django.db import models class MyItem(models.Model): title = models.CharField(max_length=200) myapp/admin.py中注册模型,以便在Django管理界面中查看和管理爬取到的数据:from django.contrib import admin from .models import MyItem admin.site.register(MyItem) myproject/settings.py中添加myapp到INSTALLED_APPS列表:INSTALLED_APPS = [ # ... 'myapp', ] python manage.py makemigrations python manage.py migrate 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'), ] 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}') 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'), ] 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) 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')), ] 创建一个Scrapy项目并将爬虫添加到该项目中。然后,您可以使用scrapy crawl myspider命令运行爬虫。爬取到的数据将存储在Django数据库中,并可以通过访问/save_spider_output/ URL来保存到CSV文件。
如果需要,您可以在Django管理界面中查看和管理爬取到的数据。
通过以上步骤,您可以将Python爬虫与Django集成,实现数据的爬取、存储和管理。