在数据采集领域,定时爬取网页数据是一项常见需求。例如,新闻网站每日更新、电商价格监控、社交媒体舆情分析等场景,都需要定时执行爬虫任务。Python的Scrapy框架是强大的爬虫工具,而APScheduler则提供了灵活的任务调度功能。
Scrapy 是一个快速、高层次的 Python 爬虫框架,用于抓取网站数据并提取结构化信息。它具有以下特点:
APScheduler(Advanced Python Scheduler)是一个功能强大的 Python 定时任务调度库,可以用来执行定时任务。它具有以下特点:
在开始之前,确保你已经安装了 Python 环境,并且安装了 Scrapy 和 APScheduler。可以通过以下命令安装所需的库
首先,创建一个 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/
,并提取页面标题。
接下来,我们需要将 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 分钟运行一次爬虫。
现在,一切准备就绪。在终端中运行以下命令启动定时爬虫任务:
python scheduler.py
程序将开始运行,并每隔 10 分钟执行一次爬虫任务。你可以通过查看控制台输出来确认爬虫是否正常运行。
本文详细介绍了如何结合 Scrapy 和 APScheduler 实现一个自动化定时爬虫任务。通过 Scrapy,我们可以高效地抓取网站数据;通过 APScheduler,我们可以灵活地设置定时任务。此外,我们还介绍了如何添加日志记录、使用代理和存储数据等优化和扩展功能。希望本文能够帮助读者掌握这一实用的技术组合,构建出更加高效、稳定的爬虫系统。