使用Django-Dynamic-Scraper构建动态网页爬虫
使用Django-Dynamic-Scraper构建动态网页爬虫
Django-Dynamic-Scraper是一个强大的工具,允许你通过Django管理界面创建Scrapy爬虫,无需编写大量代码即可实现网页数据的抓取和存储。本文将指导你如何使用该工具从零开始构建动态爬虫项目。
安装与配置 🛠️
系统要求
开始之前,请确保以下依赖已安装:
- Python 3.5、3.6或3.7(实验性支持)
- Django 1.11(暂不支持2.0+版本)
- Scrapy 1.5
- scrapy-djangoitem 1.1
- Python JSONPath RW 1.4+
- Python-Future 0.17.x
可选依赖:
- 如果需要使用调度功能,安装django-celery 3.2.1
- 如果需要处理图片,安装Pillow 6.x
安装步骤
使用pip安装:
pip install django-dynamic-scraper
或者手动安装:
git clone https://gitcode.com/gh_mirrors/dj/django-dynamic-scraper.git .
cd django-dynamic-scraper
pip install -r requirements.txt
python setup.py install
安装完成后,在Django项目设置中添加dynamic_scraper到INSTALLED_APPS。
创建Django模型 📊
定义数据模型
在Django项目中创建以下模型:
from django.db import models
from dynamic_scraper.models import Scraper, SchedulerRuntime
from scrapy_djangoitem import DjangoItem
class Website(models.Model):
name = models.CharField(max_length=200)
url = models.URLField()
scraper = models.ForeignKey(Scraper, blank=True, null=True, on_delete=models.SET_NULL)
scraper_runtime = models.ForeignKey(SchedulerRuntime, blank=True, null=True, on_delete=models.SET_NULL)
def __str__(self):
return self.name
class Page(models.Model):
title = models.CharField(max_length=200)
website = models.ForeignKey(Website)
description = models.TextField(blank=True)
url = models.URLField(blank=True)
checker_runtime = models.ForeignKey(SchedulerRuntime, blank=True, null=True, on_delete=models.SET_NULL)
def __str__(self):
return self.title
class PageItem(DjangoItem):
django_model = Page
Website模型用于存储网站信息和抓取器配置,Page模型用于存储抓取的数据,PageItem用于连接Scrapy与Django。
配置抓取器 🔧
定义抓取对象
- 登录Django管理界面,创建一个新的"Scraped Obj Class"
- 为
Page模型定义抓取属性:
- 基础属性(BASE):用于定位列表页中的每个条目
- 详情页URL(DETAIL_PAGE_URL):文章链接
- 标准属性(STANDARD):标题和描述
确保将URL字段设为ID字段以避免重复条目。
创建爬虫 🕷️
配置XPath和处理器
- 创建一个新的Scraper,选择之前定义的Scraped Obj Class
- 为每个属性添加Scraper Element,并定义XPath和处理方式:
- 基础元素:
//td[@class="l_box"] - 标题:详情页抓取,XPath为
//h1[@id="firstHeading"]/text() - 描述:列表页抓取,XPath为
p/span[@class="l_summary"]/text() - URL:
span[@class="l_title"]/a/@href并添加预处理器补全域名
运行爬虫 🚀
执行抓取命令
在命令行中运行:
scrapy crawl page_spider -a id=1 -a do_action=yes
其中id=1是你创建的Website对象的ID。成功运行后,抓取结果将显示在Django管理界面中。
高级功能:调度与监控 ⏱️
定期抓取
通过Celery配置定期抓取任务,在管理界面中设置调度运行时。
监控抓取状态
管理界面提供监控部分,显示抓取器的运行状态和日志。
总结 📝
通过本文,你已了解如何使用Django-Dynamic-Scraper构建动态爬虫的基本流程。从安装配置到创建模型,再到定义抓取规则和运行爬虫,这个工具简化了网页数据抓取的过程。
要深入了解更多高级功能,请参考官方文档。现在,你可以尝试为不同网站创建自己的抓取器,探索更多可能性!