当前位置: 首页 > news >正文

Django-Dynamic-Scraper入门教程:从零开始构建你的第一个动态爬虫

Django-Dynamic-Scraper入门教程:从零开始构建你的第一个动态爬虫

【免费下载链接】django-dynamic-scraperCreating Scrapy scrapers via the Django admin interface项目地址: https://gitcode.com/gh_mirrors/dj/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。

Scrapy配置

创建Scrapy配置文件scrapy.cfg:

[settings] default = open_news.scraper.settings [deploy:scrapyd1] url = http://localhost:6800/ project = open_news

并在scraper目录下创建settings.py:

import os PROJECT_ROOT = os.path.abspath(os.path.dirname(__file__)) os.environ.setdefault("DJANGO_SETTINGS_MODULE", "example_project.settings") BOT_NAME = 'open_news' SPIDER_MODULES = ['dynamic_scraper.spiders', 'open_news.scraper',] USER_AGENT = '%s/%s' % (BOT_NAME, '1.0') ITEM_PIPELINES = { 'dynamic_scraper.pipelines.ValidationPipeline': 400, 'open_news.scraper.pipelines.DjangoWriterPipeline': 800, }

创建Django模型 📊

定义数据模型

在Django项目中,我们需要创建两个模型类:一个用于存储抓取的数据,另一个作为引用类。以新闻网站为例:

from django.db import models from dynamic_scraper.models import Scraper, SchedulerRuntime from scrapy_djangoitem import DjangoItem class NewsWebsite(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 Article(models.Model): title = models.CharField(max_length=200) news_website = models.ForeignKey(NewsWebsite) 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 ArticleItem(DjangoItem): django_model = Article

NewsWebsite模型存储网站信息和抓取器配置,Article模型存储抓取的新闻数据,ArticleItem则用于Scrapy与Django的连接。

配置抓取对象类 🔧

在管理界面定义抓取对象

完成模型创建和数据库同步后,Django管理界面会显示新的模型。首先需要定义要抓取的对象类及其属性:

  1. 登录Django管理界面,你会看到类似以下的界面:

  1. 创建一个新的"Scraped Obj Class",为Article模型定义要抓取的属性:
    • 基础属性(BASE):用于定位列表页中的每个条目
    • 详情页URL(DETAIL_PAGE_URL):文章的链接
    • 标准属性(STANDARD):标题和描述等内容

确保将URL字段设置为ID字段,以防止重复条目。

创建抓取器 🕷️

配置XPath和处理器

  1. 创建一个新的Scraper,选择之前定义的Scraped Obj Class

  2. 为每个属性添加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并添加预处理器补全域名
  3. 添加请求页面类型,配置主页面和详情页的请求设置:

连接Scrapy与Django 🔗

创建Spider和Pipeline

创建spiders.py定义爬虫:

from dynamic_scraper.spiders.django_spider import DjangoSpider from open_news.models import NewsWebsite, Article, ArticleItem class ArticleSpider(DjangoSpider): name = 'article_spider' def __init__(self, *args, **kwargs): self._set_ref_object(NewsWebsite, **kwargs) self.scraper = self.ref_object.scraper self.scrape_url = self.ref_object.url self.scheduler_runtime = self.ref_object.scraper_runtime self.scraped_obj_class = Article self.scraped_obj_item_class = ArticleItem super(ArticleSpider, self).__init__(self, *args, **kwargs)

创建pipelines.py处理抓取结果:

import logging from django.db.utils import IntegrityError from scrapy.exceptions import DropItem from dynamic_scraper.models import SchedulerRuntime class DjangoWriterPipeline(object): def process_item(self, item, spider): if spider.conf['DO_ACTION']: try: item['news_website'] = spider.ref_object checker_rt = SchedulerRuntime(runtime_type='C') checker_rt.save() item['checker_runtime'] = checker_rt item.save() spider.action_successful = True except IntegrityError as e: spider.log(str(e), logging.ERROR) raise DropItem("Missing attribute.") return item

运行和测试爬虫 🚀

执行抓取命令

在命令行中运行以下命令启动爬虫:

scrapy crawl article_spider -a id=1 -a do_action=yes

其中id=1是你创建的NewsWebsite对象的ID。成功运行后,你将看到类似以下的输出:

查看抓取结果

返回Django管理界面,你将看到抓取的文章已经存储在数据库中:

高级功能:调度和监控 ⏱️

设置定期抓取

Django-Dynamic-Scraper支持使用Celery设置定期抓取任务。在管理界面中,你可以配置调度运行时:

监控抓取状态

管理界面提供了监控部分,显示抓取器的运行状态和日志:

总结 📝

通过本教程,你已经了解了如何使用Django-Dynamic-Scraper构建动态爬虫的基本流程。从安装配置到创建模型,再到定义抓取规则和运行爬虫,这个工具简化了网页数据抓取的过程,让你无需编写大量代码即可实现强大的抓取功能。

要深入了解更多高级功能,如处理JavaScript渲染的页面、使用自定义处理器等,请参考项目的官方文档。现在,你可以尝试为不同的网站创建自己的抓取器,探索更多可能性!

【免费下载链接】django-dynamic-scraperCreating Scrapy scrapers via the Django admin interface项目地址: https://gitcode.com/gh_mirrors/dj/django-dynamic-scraper

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

http://www.jsqmd.com/news/494721/

相关文章:

  • 致我的17岁——未成年的终章
  • 2026年知名的点烟器DC线工厂推荐:点烟器插座生产厂家推荐 - 行业平台推荐
  • 自动驾驶大模型---Diffusion Planner
  • Tea Auto Bot:Tea Sepolia测试网自动化交互工具解析
  • 2026年质量好的保温水箱公司推荐:新疆地埋水箱口碑好的厂家推荐 - 行业平台推荐
  • react-shimmer源码解析:探索高性能图片加载组件的实现原理
  • Swot域名数据库详解:如何贡献并维护全球高校域名信息?
  • 避免90%状态错误:ADK-Python变量引用与上下文管理完全指南
  • multierr与标准库兼容性:errors.Is和errors.As完美结合
  • MegaETH Auto Bot:自动化参与Meganet带宽共享的技术解析
  • 汉字拼音转换神器pinyin:一站式解决注音、排序与检索难题
  • VapeLabs自动机器人技术解析与实现方案
  • Awesome Programming for Kids深度解析:从玩具机器人到代码世界的桥梁
  • Runtime实战教程:3个实例带你掌握动态创建实例的秘诀
  • Zygisk API完全指南:用NeoZygisk开发模块的5个关键步骤
  • 如何用No-as-a-Service快速获取创意拒绝理由?5分钟上手教程
  • go-wkhtmltopdf核心功能解析:从HTML到PDF的高效转换
  • 2025前端质量保障终极指南:Web开发清单从入门到精通
  • Package Control:Sublime Text 终极包管理器,5分钟上手安装与使用指南
  • 如何用uni-api快速搭建个人AI服务:5分钟配置多模型负载均衡指南
  • 解答UnityShader学习过程中的一些疑惑(持续更新中)
  • Awesome Programming for Kids揭秘:从Scratch Jr.到Python Turtle的完美进阶路径
  • jqdatasdk与Python量化策略结合:构建你的第一个交易模型
  • 华三(H3C)防火墙配置IPsec
  • 如何快速上手pinyin?3分钟掌握汉字转拼音的终极指南
  • 3分钟解决Obtainium GitLab源识别难题:从报错到完美适配
  • scout-elasticsearch-driver命令行工具全攻略:索引创建、更新与删除的实用技巧
  • No-as-a-Service背后的957条幽默拒绝理由:从文艺到无厘头的完整解析
  • 终极指南:如何突破K9s权限壁垒,轻松解决受限环境下的资源跳转难题
  • 探索Swaptube分形渲染:Mandelbrot与Julia集的视觉艺术