要将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集成,实现数据的爬取、存储和管理。