侧边栏壁纸
博主头像
fragment博主等级

最真实的失望 去感受它 慢慢变成营养

  • 累计撰写 47 篇文章
  • 累计创建 13 个标签
  • 累计收到 4 条评论

【信息收集】工具-爬虫scrapy:应用商店

fragment
2023-11-17 / 0 评论 / 0 点赞 / 832 阅读 / 4,314 字

目录:
前置
实践
部署
日常使用
参考

前置

问:写一份教程,说明如何先编写scrapy后,增加scrapyd,说明依赖jenkins和docker部署的流程

chatgpt答:以下是如何使用Scrapy和Scrapyd以及依赖Jenkins和Docker的部署流程的教程:

安装Scrapy和Scrapyd

首先,需要安装Scrapy和Scrapyd。在命令行中输入以下命令:

pip install scrapy
pip install scrapyd

新建Scrapy工程 在命令行中,使用以下命令创建新的Scrapy项目:

scrapy startproject your_project_name

编写Scrapy爬虫 在你的Scrapy项目中,可以创建一个名为spider.py的文件来编写爬虫。这个文件应该包含Scrapy爬虫的逻辑。以下是一个示例的代码:

import scrapy
 
class MySpider(scrapy.Spider):
    name = 'myspider'
    start_urls = ['http://www.example.com']
 
    def parse(self, response):
        # 爬虫逻辑

配置Scrapyd 在你的Scrapy项目中,可以创建名为scrapy.cfg的文件进行Scrapyd的配置。以下是一个示例的代码:

[settings]
default = myproject.settings
 
[deploy:scrapyd]
url = http://localhost:6800/
project = myproject
 
[log]
level = INFO
  • project是你的Scrapy项目的名称 - url是Scrapyd的地址 ## 启动Scrapyd 在命令行中,输入以下命令启动Scrapyd:
scrapyd

使用Scrapyd部署Scrapy爬虫 在你的Scrapy项目中,使用以下命令打包你的爬虫:

scrapyd-deploy your_target -p your_project_name

your_target应该是你已经配置好的Scrapyd目标。这个命令将会打包你的爬虫成一个egg文件。例如:

scrapyd-deploy my_production_target -p myproject

配置Jenkins 在Jenkins中,新建一个名为"Scrapyd部署"的流程:

  1. 配置你的Jenkins访问Scrapyd服务器的插件和环境变量
  2. 选择一个适合你的支持Python和Docker运行的诸如Ubuntu的节点
  3. 在流程中配置构建步骤,使用以下命令:
pip install scrapyd-client
python setup.py install
scrapyd-deploy my_production_target -p myproject

配置Docker 最后,将Scrapyd配置到Docker集群中,以确保你能够轻松地在多台机器上部署Scrapy爬虫。在Docker中,你可以使用以下命令:

docker run -d --name scrapyd -p 6800:6800 scrapinghub/scrapyd

除此之外,你也可以使用Docker Compose或其他容器编排工具来对Scrapyd进行管理和部署。

总结 以上就是如何使用Scrapy和Scrapyd以及依赖Jenkins和Docker的部署流程。希望本文条理清晰,对你有所帮助!

实践

需求背景:通过爬虫获取各应用商店的公司应用信息

爬虫逻辑脚本:

爬虫管理服务:

  • 使用Scrapyd 参考https://scrapyd.readthedocs.io/ 负责管理Spider进程的启动、停止和监控等基础功能
  • 增加Scrapyd依赖包说明和项目配置
[scrapyd]
eggs_dir    = eggs    # egg文件存放目录   
logs_dir    = logs    # 日志文件存放目录   logs_dir/project/spidername/****.log 
items_dir   = items   # item文件存放目录   items_dir/project/spidername/***.jl 
jobs_to_keep = 5      # 保留log日志文件数量
dbs_dir     =         # 存放sqlitedb文件目录 dbs_dir/**.db  本例子中无该配置
max_proc    = 0       # 启动scrapyd进程最大数,设置为0则默认最大进程数为 cpus数*max_proc_per_cpu
max_proc_per_cpu = 4  # 每个cpu启动scrapyd进程数
finished_to_keep = 100   # 保留jobs的数量,超过该数自动删除之前的记录
poll_interval = 5.0     # 每次拉去任务的间隔时间
bind_address = 0.0.0.0  # tcp服务绑定的IP 默认是127.0.0.1 需要修改为 0.0.0.0
http_port   = 6800         # tcp服务绑定端口号
username    =             # 设置用户名
password    =             # 设置密码
debug       = off         # 是否开启debug  True or False
runner      = scrapyd.runner  # 默认的启动类
# jobs保存方式 jobstorage = scrapyd.jobstorage.MemoryJobStorage|scrapyd.jobstorage.SqliteJobStorage 内存保存和sqlite保存 本例子中无该配置
application = scrapyd.app.application  # 调用scrapy服务类
launcher    = scrapyd.launcher.Launcher  # 任务调度启动类
webroot     = scrapyd.website.Root     # web页面启动类
# 管理egg文件 eggstorage  = scrapyd.eggstorage.FilesystemEggStorage  本例子中无该配置
 
[services]
schedule.json     = scrapyd.webservice.Schedule   # 添加任务接口
cancel.json       = scrapyd.webservice.Cancel     # 取消任务接口
addversion.json   = scrapyd.webservice.AddVersion # 添加project接口
listprojects.json = scrapyd.webservice.ListProjects # 查询所有project项目接口
listversions.json = scrapyd.webservice.ListVersions # 查询所有project 的version接口
listspiders.json  = scrapyd.webservice.ListSpiders # 查询project,version下所有的spider
delproject.json   = scrapyd.webservice.DeleteProject # 删除project
delversion.json   = scrapyd.webservice.DeleteVersion # 删除project指定version
listjobs.json     = scrapyd.webservice.ListJobs # 查询出所有项目 包括历史任务,正在执行任务,等待执行任务
daemonstatus.json = scrapyd.webservice.DaemonStatus # 查询scrapyd server的状态

部署

步骤1、在xxxx先部署Scrapyd
设置启动命令为 venv/bin/scrapyd
设置负载均衡 后可访问scrapyd服务,此时未关联待管理的爬虫脚本,所以可用项目显示为空(重启Scrapyd会回到这种状态)

步骤2、配置爬虫项目appSpider下的 scrapy.cfg

[settings]
default = appSpider.settings
 
[deploy:cloud]
url = http://scrapyd.test.xxx.com/
project = appSpider

构建镜像启动命令为

venv/bin/scrapyd-deploy cloud -p appSpider

步骤3、使用以下管理接口可以执行爬虫

curl http://scrapyd.test.xxx.com/schedule.json -d project=appSpider -d spider=appleappstore -d jobid=1
curl http://scrapyd.test.xxx.com/schedule.json -d project=appSpider -d spider=huawei -d jobid=1
# jobid 不设置则为随机uuid

步骤4、查看执行情况、日志
https://scrapyd.test.xxx.com/jobs
https://scrapyd.test.xxx.com/items/appSpider/appleappstore/items.xml

步骤5、增加appSpider项目下爬虫,增加代码后构建、更新镜像版本即可。如需新增项目,重复步骤2

日常使用

直接访问https://scrapyd.test.xxx.com/
如发现Available projects:存活项目名称为空,则为job任务下线,只需要新建应用版本即可恢复使用

触发爬虫任务进行步骤3
拿数据进行步骤4

参考

https://zhuanlan.zhihu.com/p/99250581;Scrapyd对接Docker - Python3网络爬虫开发实战 - https://python3webspider.cuiqingcai.com/15.3scrapyd-dui-jie-docker

扩展:https://github.com/crawlab-team/crawlab
风险:未授权访问
由于爬取内容原本为外部公开信息 信息未授权访问问题不大;
但爬虫执行会消耗资源 可后续增加配置文件中配置爬虫成功和失败的webhook通知地址,可以将数据推送到指定的webhook地址

补充:
只是更新爬虫的话,更新appspider 爬虫代码,构建、推送新镜像,删除旧版本,新增新版本镜像应用。在容器日志中观察启动情况。正常可以进行步骤3
如果发现爬虫地址的数据不见了 项目都被清空了 可能是因为部署问题(系统对应用资源调整导致的应用下线),重启下appSpider能恢复正常

0

评论区