
Scrapyd:分步教程
无论你是在大规模抓取数据,还是需要一种更轻松的方式来管理多个 spiders,Scrapyd 都能简化流程,并帮助一切顺畅运行。
什么是 Scrapyd?
Scrapyd 是一款用于在服务器上部署和管理 Scrapy spiders 的工具。你可以通过简单的 API 调用远程控制所有内容。Scrapyd 服务器作为后台服务运行,会自动处理 crawl 请求并执行它们,无需人工干预。
使用 Scrapyd,你可以:
-
轻松远程部署和管理你的 Scrapy 项目。
-
通过统一的 JSON API 控制所有抓取任务。
-
使用用户友好的 Web 界面监控和管理你的 spiders。
-
通过在多台服务器上运行 spiders 来扩展你的数据采集能力。
-
通过调整并发 spiders 的数量来提升服务器性能。
-
使用 Celery 和 Gerapy 等工具自动化任务。
-
将 Scrapy 与 Python 框架(如 Django)集成,以增强你的 Web 应用。
现在,让我们深入了解如何使用 Scrapyd 部署你的 Scrapy spiders。
替代方案 --- 网页抓取 API 和工具
如果你的项目需要大规模抓取,并且你不想处理代理和验证码破解工具,你可以选择最佳网页抓取 API 和工具之一。下面,我列出了排名前 5 的网页抓取工具。
-
Bright Data --- 高级抓取的综合最佳选择;具备广泛的代理管理功能和可靠的 API。
-
Octoparse --- 用户友好的无代码工具,用于从网站自动提取数据。
-
ScrapingBee --- 面向开发者的 API,可高效处理代理、浏览器和 CAPTCHA。
-
Scrapy --- 开源 Python 框架,非常适合数据爬取和抓取任务。
-
ScraperAPI --- 借助先进的反机器人技术处理高难度抓取;非常适合开发者。
我与上述任何服务提供商都没有关联,只是使用它们的体验不错。
如何使用 Scrapyd 运行 Scrapy Spiders
先决条件
确保你的系统已安装 Python 3+。你需要通过 pip 安装 Scrapy、Scrapyd 和 Scrapyd-client。
pip install scrapyd scrapy scrapyd-client
设置你的 Scrapy 项目
创建 Scrapy 项目:使用命令 scrapy startproject <PROJECT_NAME> 创建一个 Scrapy 项目。
创建 Spider:在 spiders 文件夹中,创建一个 爬虫工具.py 文件,并写入以下基础 spider:
from scrapy.spiders import Spider
class MySpider(Spider):
name = 'product_scraper'
start_urls = ['https://www.scrapingcourse.com/ecommerce/']
def parse(self, response):
products = response.css('ul.products li.product')
data = []
for product in products:
product_name = product.css('h2.woocommerce-loop-product__title::text').get()
price = product.css('bdi::text').get()
data.append({'product_name': product_name, 'price': price})
self.log(data)
测试你的 Spider:通过运行以下命令在本地测试该 spider:
scrapy crawl product_scraper
这应该会从电商页面抓取并记录产品名称和价格。
将 Spiders 部署到 Scrapyd
启动 Scrapyd 服务器:运行以下命令来启动 Scrapyd 服务器:
scrapyd
你会看到服务器运行在 http://localhost:6800。
配置 Scrapy 项目:修改项目中的 scrapy.cfg 文件,以包含正确的部署 URL:
settings
default = 抓取工具.settings
deploy:local
url = http://localhost:6800/
project = 爬虫
部署爬虫:使用以下命令将你的爬虫部署到 Scrapyd:
scrapyd-deploy local -p 抓取工具
你应该会看到一个确认部署成功的 JSON 响应。
监控部署 :打开浏览器并访问 http://localhost:6800. 你的项目应列在"可用项目"下。
使用 Scrapyd 管理爬虫
安排任务
你可以使用 Scrapyd 的 JSON API 来安排爬虫。调度端点是 http://localhost:6800/schedule.json. 使用以下 curl 命令:
curl http://localhost:6800/schedule.json -d project=爬虫工具 -d spider=product_scraper
或者,你可以创建一个 Python 脚本(schedule.py)来发起请求:
import requests
url = 'http://localhost:6800/schedule.json'
data = {'project': '抓取工具', 'spider': 'product_scraper'}
response = requests.post(url, data=data)
if response.status_code == 200:
print(response.json())
else:
print(response.json())
监控作业
要监控所有正在运行的任务,请使用 listjobs.json 端点:
curl http://localhost:6800/listjobs.json?project=爬虫
你也可以创建一个 Python 脚本(monitor.py)用于监控:
import requests
url = 'http://localhost:6800/listjobs.json'
params = {'project': '抓取工具'}
response = requests.get(url, params=params)
if response.status_code == 200:
print(response.json())
else:
print(response.json())
取消作业
要取消正在运行的作业,请使用 cancel.json 端点。提供你想取消的作业 ID:
curl http://localhost:6800/cancel.json -d project=爬虫工具 -d job=<TARGET_JOB_ID>
或者,在 Python 中:
import requests
url = 'http://localhost:6800/cancel.json'
data = {'project': '抓取工具', 'job': '<TARGET_JOB_ID>'}
response = requests.post(url, data=data)
if response.status_code == 200:
print(response.json())
else:
print(response.json())
ScrapydWeb:用于管理 Scrapy 爬虫的用户界面
ScrapydWeb 是一个基于 Web 的界面,用于管理 Scrapyd 任务。它让你可以轻松安排和监控爬虫,不过目前仅支持 Python 3.9 以下版本。
安装 ScrapydWeb:使用 pip 安装:
pip install scrapydweb
启动 ScrapydWeb 服务器 :从你的项目文件夹运行命令 scrapydweb。该界面可通过 http://127.0.0.1:5000 访问。
安排并监控爬虫:使用该界面安排、运行和监控你的爬虫。你还可以设置 cron 作业,并配置 user agents 和 cookies 等爬虫参数。
Gerapy:高级爬虫管理
Gerapy 是另一个基于 Django 和 Scrapy 构建的爬虫管理工具。它提供了更多功能,如安排 cron 作业、可视化代码编辑器等。
安装 Gerapy:使用 pip 安装 Gerapy:
pip install gerapy
设置 Gerapy:按照设置说明初始化并配置 Gerapy,使其与 Scrapyd 同步。
创建并安排任务:使用 Gerapy 的 Web 界面创建任务,通过 interval 或 cron 触发器安排任务,并监控任务性能。
结论
Scrapyd 是管理 Scrapy 爬虫的强大解决方案,可实现高效的任务安排、监控和扩展。使用 Scrapyd 的 API、ScrapydWeb 或 Gerapy,你可以简化网页抓取工作流并提高生产力。
有什么无法正常工作吗?还有其他问题吗?欢迎在评论中告诉我。感谢阅读!:)
对其他网页抓取指南感兴趣?
如需阅读其他精彩文章,请访问我的个人主页 --- Data Journal ❤️