Django-Dynamic-Scraper入门教程:从零开始构建你的第一个动态爬虫
Django-Dynamic-Scraper入门教程从零开始构建你的第一个动态爬虫【免费下载链接】django-dynamic-scraperCreating Scrapy scrapers via the Django admin interface项目地址: https://gitcode.com/gh_mirrors/dj/django-dynamic-scraperDjango-Dynamic-Scraper是一个强大的工具它允许你通过Django管理界面创建Scrapy爬虫无需编写大量代码即可实现网页数据的抓取和存储。本教程将带你逐步了解如何使用这个工具从零开始构建你的第一个动态爬虫项目。准备工作安装与环境配置 ️系统要求在开始之前请确保你的系统满足以下要求Python 3.5、3.6或3.7实验性支持Django 1.11暂不支持2.0版本Scrapy 1.5scrapy-djangoitem 1.1Python JSONPath RW 1.4Python-Future 0.17.x如果你需要使用调度机制还需安装django-celery 3.2.1如需处理图片需安装Pillow库6.x版本。安装步骤最简便的安装方式是使用pippip 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.pyimport 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_length200) url models.URLField() scraper models.ForeignKey(Scraper, blankTrue, nullTrue, on_deletemodels.SET_NULL) scraper_runtime models.ForeignKey(SchedulerRuntime, blankTrue, nullTrue, on_deletemodels.SET_NULL) def __str__(self): return self.name class Article(models.Model): title models.CharField(max_length200) news_website models.ForeignKey(NewsWebsite) description models.TextField(blankTrue) url models.URLField(blankTrue) checker_runtime models.ForeignKey(SchedulerRuntime, blankTrue, nullTrue, on_deletemodels.SET_NULL) def __str__(self): return self.title class ArticleItem(DjangoItem): django_model ArticleNewsWebsite模型存储网站信息和抓取器配置Article模型存储抓取的新闻数据ArticleItem则用于Scrapy与Django的连接。配置抓取对象类 在管理界面定义抓取对象完成模型创建和数据库同步后Django管理界面会显示新的模型。首先需要定义要抓取的对象类及其属性登录Django管理界面你会看到类似以下的界面创建一个新的Scraped Obj Class为Article模型定义要抓取的属性基础属性BASE用于定位列表页中的每个条目详情页URLDETAIL_PAGE_URL文章的链接标准属性STANDARD标题和描述等内容确保将URL字段设置为ID字段以防止重复条目。创建抓取器 ️配置XPath和处理器创建一个新的Scraper选择之前定义的Scraped Obj Class为每个属性添加Scraper Element定义XPath和处理方式基础元素使用//td[classl_box]定位新闻条目标题从详情页抓取XPath为//h1[idfirstHeading]/text()描述从列表页抓取XPath为p/span[classl_summary]/text()URL使用span[classl_title]/a/href并添加预处理器补全域名添加请求页面类型配置主页面和详情页的请求设置连接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_typeC) 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 id1 -a do_actionyes其中id1是你创建的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.coloradmin.cn/o/2422146.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!