Python自动化爬虫:Scrapy+APScheduler定时任务

news2025/4/13 20:52:22

在数据采集领域,定时爬取网页数据是一项常见需求。例如,新闻网站每日更新、电商价格监控、社交媒体舆情分析等场景,都需要定时执行爬虫任务。Python的Scrapy框架是强大的爬虫工具,而APScheduler则提供了灵活的任务调度功能。

一、Scrapy 爬虫框架简介

Scrapy 是一个快速、高层次的 Python 爬虫框架,用于抓取网站数据并提取结构化信息。它具有以下特点:

  1. 高效:Scrapy 使用异步网络编程技术,能够同时处理多个请求,大大提高了爬取效率。
  2. 可扩展性:Scrapy 提供了丰富的扩展接口,开发者可以根据需要添加自定义功能。
  3. 易于使用:Scrapy 提供了简洁的 API 和清晰的文档,使得开发者能够快速上手。
  4. 安全性:Scrapy 支持多种反爬虫策略,如代理、User-Agent 模拟等,能够有效应对复杂的网络环境。

二、APScheduler 定时任务调度库简介

APScheduler(Advanced Python Scheduler)是一个功能强大的 Python 定时任务调度库,可以用来执行定时任务。它具有以下特点:

  1. 多种调度方式:APScheduler 支持多种调度方式,包括间隔调度(interval)、定时调度(cron)和日期调度(date)。
  2. 灵活的存储方式:APScheduler 支持多种存储方式,如内存、数据库等,可以根据需要选择合适的存储方式。
  3. 易于集成:APScheduler 提供了简洁的 API,可以轻松集成到其他 Python 项目中。
  4. 高可靠性:APScheduler 支持任务持久化和恢复,即使在程序崩溃后也能继续执行任务。

三、结合 Scrapy 和 APScheduler 实现定时爬虫任务

1. 环境准备

在开始之前,确保你已经安装了 Python 环境,并且安装了 Scrapy 和 APScheduler。可以通过以下命令安装所需的库

2. 创建 Scrapy 爬虫项目

首先,创建一个 Scrapy 爬虫项目。在终端中运行以下命令:

这将创建一个名为 myspider 的 Scrapy 项目目录。接下来,创建一个爬虫。在 myspider/spiders 目录下创建一个名为 example_spider.py 的文件,并添加以下内容:

import scrapy

class ExampleSpider(scrapy.Spider):
    name = 'example'
    allowed_domains = ['example.com']
    start_urls = ['http://example.com/']

    def parse(self, response):
        # 提取页面中的数据
        title = response.css('h1::text').get()
        yield {
            'title': title
        }

这个简单的爬虫会访问 http://example.com/,并提取页面标题。

3. 配置 APScheduler

接下来,我们需要将 APScheduler 集成到项目中。在 myspider 目录下创建一个名为 scheduler.py 的文件,并添加以下内容:

from apscheduler.schedulers.background import BackgroundScheduler
from scrapy.crawler import CrawlerProcess
from myspider.spiders.example_spider import ExampleSpider
from scrapy.utils.project import get_project_settings

# 代理信息
proxyHost = "www.16yun.cn"
proxyPort = "5445"
proxyUser = "16QMSOML"
proxyPass = "280651"
proxyServer = f"http://{proxyUser}:{proxyPass}@{proxyHost}:{proxyPort}"

# 自定义代理中间件
class CustomProxyMiddleware:
    def process_request(self, request, spider):
        request.meta['proxy'] = proxyServer

def run_spider():
    # 获取 Scrapy 项目的配置
    settings = get_project_settings()
    
    # 添加自定义代理中间件
    settings.set('DOWNLOADER_MIDDLEWARES', {
        'myspider.middlewares.CustomProxyMiddleware': 100,
    })
    
    process = CrawlerProcess(settings)
    process.crawl(ExampleSpider)
    process.start()

if __name__ == '__main__':
    scheduler = BackgroundScheduler()
    # 每隔 10 分钟运行一次爬虫
    scheduler.add_job(run_spider, 'interval', minutes=10)
    scheduler.start()

    try:
        # 保持程序运行
        while True:
            pass
    except (KeyboardInterrupt, SystemExit):
        scheduler.shutdown()

这段代码创建了一个背景调度器,并设置了一个间隔调度任务,每隔 10 分钟运行一次爬虫。

4. 运行定时爬虫任务

现在,一切准备就绪。在终端中运行以下命令启动定时爬虫任务:

python scheduler.py

程序将开始运行,并每隔 10 分钟执行一次爬虫任务。你可以通过查看控制台输出来确认爬虫是否正常运行。

四、总结

本文详细介绍了如何结合 Scrapy 和 APScheduler 实现一个自动化定时爬虫任务。通过 Scrapy,我们可以高效地抓取网站数据;通过 APScheduler,我们可以灵活地设置定时任务。此外,我们还介绍了如何添加日志记录、使用代理和存储数据等优化和扩展功能。希望本文能够帮助读者掌握这一实用的技术组合,构建出更加高效、稳定的爬虫系统。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2333354.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

技术分享|iTOP-RK3588开发板Ubuntu20系统旋转屏幕方案

iTOP-3588开发板采用瑞芯微RK3588处理器,是全新一代AloT高端应用芯片,采用8nmLP制程,搭载八核64位CPU,四核Cortex-A76和四核Cortex-A55架构,主频高达2.4GHz。是一款可用于互联网设备和其它数字多媒体的高性能产品。 在…

3.3.1 spdlog异步日志

文章目录 3.3.1 spdlog异步日志1. spdlog1. 日志作用2 .同步日志和异步日志区别 2. spdlog是什么下载命令:2. spdlog为什么高效3. spdlog特征5. spdlog输出控制6. 处理流程7. 文件io8.问题 2. 如何创建logger3. 如何创建sink4. 如何自定义格式化5. 如何创建异步日志…

Java 基础(4)—Java 对象布局及偏向锁、轻量锁、重量锁介绍

一、Java 对象内存布局 1、对象内存布局 一个对象在 Java 底层布局(右半部分是数组连续的地址空间),如下图示: 总共有三部分总成: 1. 对象头:储对象的元数据,如哈希码、GC 分代年龄、锁状态…

【AI论文】OLMoTrace:将语言模型输出追溯到万亿个训练标记

摘要:我们提出了OLMoTrace,这是第一个将语言模型的输出实时追溯到其完整的、数万亿标记的训练数据的系统。 OLMoTrace在语言模型输出段和训练文本语料库中的文档之间找到并显示逐字匹配。 我们的系统由扩展版本的infini-gram(Liu等人&#xf…

SAP GUI 显示SAP UI5应用,并实现SSO统一登陆

想用SAP UI5 做一写界面,又不想给用户用标准的Fiori APP怎么办?我觉得可以用可配置物料标准功能的思路,在SAP GUI中显示UI5界面,而不是跳转到浏览器。 代码实现后的效果如下: 1、调用UI5应用,适用于自开发…

HumanDil-Ox-LDL:保存:2-8℃保存,避免强光直射,不可冻存

化学试剂的基本介绍: /// 英文名称:HumanDil-Oxidized LowDensityLipoprotein /// 中文名称:人源红色荧光标记氧化型低密度脂蛋白 /// 浓度:1.0-4.0 mg/ml /// 外观:乳状液体 /// 缓冲液组分:PBS&…

开箱即用!推荐一款Python开源项目:DashGo,支持定制改造为测试平台!

大家好,我是狂师。 市面上的开源后台管理系统项目层出不穷,对应所使用到的技术栈也不尽相同。 今天给大家推荐一款开源后台管理系统: DashGo,不仅部署起来非常的简单,而且它是基于Python技术栈实现的,使得基于它进行…

JS小练习0.1——弹出姓名

分析&#xff1a;1.用户输入 2.内部处理保存数据 3.打印输出 <body><script>let name prompt(输入你的名字)document.write(name)</script> </body>

vue自定义颜色选择器

vue自定义颜色选择器 效果图&#xff1a; step0: 默认写法 调用系统自带的颜色选择器 <input type"color">step1:C:\Users\wangrusheng\PycharmProjects\untitled18\src\views\Home.vue <template><div class"container"><!-- 颜…

LibreOffice Writer使用01去除单词拼写判断的红色下划线

这个软件还是非常有特色的&#xff0c;因为大家需要office的全部功能&#xff0c;常常忽略了这个软件的使用体验。 csdn不是特别稳定&#xff0c;linux也没有什么比较好的md编辑器&#xff0c;所以我选择这个软件来记录我的临时博客&#xff0c;原因无他&#xff0c;它可以保存…

0401react中使用css-react-css-仿低代码平台项目

文章目录 1、普通方式-内联使用css2、引入css文件2.1、示例2.2、classnames 3、内联css与引入css文件对比3.1、内联css3.2、 外部 CSS 文件&#xff08;External CSS&#xff09; 4、css module5、sass6、classnames组合scss modules7、css-in-js7.1、CSS-in-JS 的核心特性7.2、…

《线性表、顺序表与链表》教案(C语言版本)

&#x1f31f; 各位看官好&#xff0c;我是maomi_9526&#xff01; &#x1f30d; 种一棵树最好是十年前&#xff0c;其次是现在&#xff01; &#x1f680; 今天来学习C语言的相关知识。 &#x1f44d; 如果觉得这篇文章有帮助&#xff0c;欢迎您一键三连&#xff0c;分享给更…

[ctfshow web入门] web33

信息收集 相较于上一题&#xff0c;这题多了双引号的过滤。我猜测这一题的主要目的可能是为了不让使用$_GET[a]之类的语句&#xff0c;但是$_GET[a]也是一样的 没有括号可以使用include&#xff0c;没有引号可以使用$_GET 可以参考[ctfshow web入门] web32&#xff0c;其中的所…

三、TorchRec中的Optimizer

TorchRec中的Optimizer 文章目录 TorchRec中的Optimizer前言一、嵌入后向传递与稀疏优化器融合如下图所示&#xff1a;二、上述图片的关键步骤讲解&#xff1a;三、优势四、与传统优化器对比总结 前言 TorchRec 模块提供了一个无缝 API&#xff0c;用于在训练中融合后向传递和…

webrtc pacer模块(一) 平滑处理的实现

Pacer起到平滑码率的作用&#xff0c;使发送到网络上的码率稳定。如下的这张创建Pacer的流程图&#xff0c;其中PacerSender就是Pacer&#xff0c;其中PacerSender就是Pacer。这篇文章介绍它的核心子类PacingController及Periodic模式下平滑处理的基本流程。平滑处理流程中还有…

河北工程大学e2e平台,python

题目&#xff0c;选择题包100分&#xff01; 题目&#xff0c;选择题包100分&#xff01; 题目&#xff0c;选择题包100分&#xff01; 联系&#x1f6f0;&#xff1a;18039589633

BeautifulSoup 踩坑笔记:SVG 显示异常的真正原因

“这图是不是糊了&#xff1f;”以为是样式缺了&#xff1f;试试手动复制差异在哪&#xff1f;想用对比工具一探究竟……简单到不能再简单的代码&#xff0c;有问题吗&#xff1f;最后的真相&#xff1a;viewBox vs viewbox&#xff0c;preserveAspectRatio vs preserveaspectr…

【browser-use+deepseek】实现简单的web-ui自动化

browser-use Web-UI 一、browser-use是什么 Browser Use 是一款开源Python库&#xff0c;专为大语言模型设计的智能浏览器工具&#xff0c;目的是让 AI 能够像人类一样自然地浏览和操作网页。它支持多标签页管理、视觉识别、内容提取&#xff0c;并能记录和重复执行特定动作。…

MOS管的发热原因和解决办法

发热来源 如上图&#xff0c;MOS管的工作状态有4种情况&#xff0c;分别是开通过程&#xff0c;导通过程&#xff0c;关断过程和截止过程。 导致发热的损耗主要有两种&#xff1a;开关损耗、导通损耗。 导通损耗 导通损耗比较好计算&#xff0c;根据驱动电压VGS值可以得到MOS…