搭建一个基于Django的爬虫框架涉及多个步骤,包括安装必要的库、创建项目结构、配置数据库、编写爬虫逻辑以及处理数据。以下是一个基本的步骤指南:
首先,确保你已经安装了Python和Django。然后,你需要安装一些用于爬虫的库,如requests
、beautifulsoup4
和scrapy
。
pip install django requests beautifulsoup4 scrapy
使用Django命令行工具创建一个新的项目。
django-admin startproject my_crawler
cd my_crawler
在项目中创建一个新的应用来处理爬虫逻辑。
python manage.py startapp crawler
如果你需要存储爬取的数据,可以配置一个数据库。Django默认使用SQLite,但你也可以选择其他数据库如PostgreSQL或MySQL。
在my_crawler/settings.py
中配置数据库连接:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': BASE_DIR / 'db.sqlite3',
}
}
如果你需要存储爬取的数据,可以创建一个Django模型。
在crawler/models.py
中定义模型:
from django.db import models
class CrawledItem(models.Model):
title = models.CharField(max_length=200)
url = models.URLField()
content = models.TextField()
def __str__(self):
return self.title
在crawler/spiders
目录下创建一个新的爬虫文件,例如my_spider.py
。
import scrapy
from bs4 import BeautifulSoup
from my_crawler.models import CrawledItem
class MySpider(scrapy.Spider):
name = 'my_spider'
start_urls = ['http://example.com']
def parse(self, response):
soup = BeautifulSoup(response.text, 'html.parser')
items = soup.find_all('div', class_='item')
for item in items:
title = item.find('h2').text
url = item.find('a')['href']
content = item.find('p').text
crawled_item = CrawledItem(title=title, url=url, content=content)
crawled_item.save()
如果你需要处理请求头、重试等,可以配置爬虫中间件。
在crawler/middlewares.py
中定义中间件:
from scrapy import signals
class MySpiderMiddleware:
def process_request(self, request, spider):
request.headers['User-Agent'] = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}
@classmethod
def from_crawler(cls, crawler):
middleware = cls()
crawler.signals.connect(middleware.spider_opened, signal=signals.spider_opened)
return middleware
def spider_opened(self, spider):
spider.logger.info('Spider opened: %s' % spider.name)
在my_crawler/settings.py
中配置中间件:
DOWNLOADER_MIDDLEWARES = {
'my_crawler.middlewares.MySpiderMiddleware': 543,
}
在项目根目录下运行以下命令来启动爬虫:
python manage.py crawl my_spider
你可以将爬取的数据导出到文件或数据库中。例如,将数据导出到CSV文件:
import csv
from my_crawler.models import CrawledItem
def export_to_csv():
items = CrawledItem.objects.all()
with open('crawled_items.csv', 'w', newline='') as csvfile:
fieldnames = ['title', 'url', 'content']
writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
writer.writeheader()
for item in items:
writer.writerow({
'title': item.title,
'url': item.url,
'content': item.content,
})
以上步骤提供了一个基本的Django爬虫框架的搭建过程。你可以根据具体需求进一步扩展和优化这个框架,例如添加更多的爬虫、处理反爬虫机制、使用缓存等。