一、分布式项目演示(二)(上次演示的是spider类,这次要用的是crawlspider类)
先通过一般的管道,最后才传到redis,所以redis的优先级比一般管道低
在mysql用truncate table清理表数据,可以避免数据录入从原来数据尾部接着写入,在查询中写入truncate TABLE 加表 名
scrapy_reidis 爬虫文件更改:
这里要用crawlspider所以继承rediscrawlspider类,from scrapy_redis.spiders import RedisSpider
初始url也可要换,redis_key = “zh:start_urls”。
两项目分布式 观察:
1、spider文件中打印观察
观察项目一和项目二两个爬虫留着的数据是否与redis数据库留的相等,项目一的存在一个表,项目二存另一个表
2、pipeline中打印观察
管道里观察为了看到项目一加项目二的是否为这个数据
redis中数据持久化到mysql数据库中:
由于redis是基于内存的,会在内存上处理数据,长久保存数据在内存上,会占资源,所以要长久存储的话要转到msyql中。特别是图片数据,如果不连接到mysql的话直接存在redis中会很卡,redis只适合暂时存储。
写入一个py文件,source,data =rediscli.blpop([“zh:items”])其中的blpop是弹出数据,用source,data 接收中间的逗号的意义是,前面的source代表zh:items这个键,后面的代表所有值,然后用item = json.loads(data)来存储这个值,二进制数据转成json数据放到item变量存储。
novel_from_redis novel是从redis来到这个章节的信息
mysqlconn.commit()
cursor.close()每次提交完顺便关游标可以防止数据泄露
二、scrapy 项目部署
scrapyd:(报废)
报废
报废是一个用于部署和运行刮蜘蛛的应用程序。它使您能够部署(上传)项目并使用 JSON API 控制它们的蜘蛛。
Scrapyd是一个运行Scrapy spider的开源应用程序。它提供了一个带有HTTP API的服务器,能够运行和监控Scrapy蜘蛛。要将spider部署到Scrapyd,可以使用由Scrapyd客户端包提供的Scrapyd -deploy工具。
Scrapyd安装
Scrapyd依赖于以下库,但安装过程负责安装缺少的库:
Python2.6以上
Twisted8.0以上
Scrapy0.17以上
如何安装Scrapy取决于您正在使用的平台。通用的方法是从PyPI安装它:
pip install scrapyd
安装之后 通过scrapyd命令启动即可:scrapyd
scrapyd带有一个最小的Web界面,启动后,通过访问http://localhost:6800。
pip install scrapyd-client 然后到爬虫项目文件下输入scrapyd-deploy就可以对这个爬虫进行部署
然后得到一个scrapy.cfg的部署文件,本地url的ip必须有,使用远程服务器访问的时候还要填写用户名和密码
scrapyd-deploy -1可以查看设置的部署名称和url
执行打包命令:scrapyd-deploy spider -p(部署名称) douban(项目名称)
启动爬虫:curl url -d project=(项目名称) -d spider=db
关闭爬虫:curl url -d project=(项目名称) -d job=项目名称
部署之后就相等于可以远程查看了,通过访问http://localhost:6800。来查看log日志等
遇到’scrapyd-deploy’ 不是内部或外部命令时:
bind_address=0.0.0.0(部署远程可访问)
API:
scrapyd的web界面比较简单,主要用于监控,所有的调度工作全部依靠接口实现.
官方文档:https://scrapyd.readthedocs.io/en/latest/api.html
scrapyd设置:
Scrapyd在以下位置搜索配置文件,并按顺序解析它们,最新的配置文件具有更高的优先级:
/etc/scrapyd/scrapyd.conf (Unix)
c:\scrapyd\scrapyd.conf (Windows)
/etc/scrapyd/conf.d/* (in alphabetical order, Unix)
scrapyd.conf
~/.scrapyd.conf (users home directory)
eggs_dir= eggs
logs_dir= logs
items_dir =
jobs_to_keep = 5
dbs_dir= dbs
max_proc = 0
绑定ip:如果要远程,设置为
max_proc_per_cpu = 4
0.0.C.0
finished_to_keep = 100
poll_interval = 5.2
bind_address = 127.0.0.1
http_port = 6880
debug= off
runner= scrapyd.runner
application = scrapyd.app.application
launcher= scrapyd.launcher.Launcher
webroot= scrapyd.website.Rost
[services]
schedule.json= scrapyd. webservice.schecule
cancel.json= scrapyd . webservice.carcel
addversion.json= scrapyd.webservice.AdcVersion
listprojects.json = scrapyd.webservice.ListFrojects
listversions.json = scrapyd .websarvice.Listlersions
listspiders.json = scrapyd.webservice.Listspiders
delproject.json= scrapyd.websarvice.DeleteProject
delversion.json= scrapyd .webservice.Deleteversion
listjobs.json= scrapyd .webservice.Listlobs
daemonstatus.json = scrapyd . websarvice.DaemonStatus
管道得到数据处理完之后,都要return item,来给引擎反馈,让引擎知道哪个管道接收到了,因为管道不仅只有一个,有多个来进行的。