阿里云WindowsServer部署python scrapy爬虫

时间:2024-02-19 20:09:44

*本文适合Python新手

准备工作:

1,一个阿里云ECS服务器实例

2,阿里云ECS服务器实例中安装好Mysql

3,本地开发机并已经写好爬虫项目

部署步骤:

一、复制本地Python环境至阿里云服务器

  1,阿里云服务器上安装Anaconda(本地开发机也同样用的这个配置环境,新手适应度100,嘿嘿)

  2,导出本地Python环境到文件中

#进入要导出的python环境
D:\>activate python27
#导出环境到文件中
(python27) D:\>conda env export --file py27.yml

  3,将py27.yml文件复制到阿里云服务器比如D盘根目录

  4,在服务器命令行(管理员)中输入下面的命令,然后activate一下,没问题的话OK,环境复制完毕

D:\>conda env create --file py27.yml

二、阿里云服务器安装 scrapyd注意是scrapydddddddddd!!!

(python27) D:\>pip install scrapyd

  本人对这个scrapyd 也是一知半解,通过摸索,简单理解为一个高级的网站,可以通过它本身的各种 json api 控制你的爬虫,OK,现在启动网站( ctrl+c 关闭)

(python27) D:\>scrapyd

    出现以下内容表明,已经部署成功啦

2018-07-21T23:59:41+0800 [-] Loading c:\programdata\anaconda3\envs\python27\lib\site-packages\scrapyd\txapp.py...
2018-07-21T23:59:43+0800 [-] Scrapyd web console available at http://0.0.0.0:6800/
2018-07-21T23:59:43+0800 [-] Loaded.
2018-07-21T23:59:43+0800 [twisted.application.app.AppLogger#info] twistd 16.6.0 (c:\programdata\anaconda3\envs\python27\python.exe 2.7.13) starting up.
2018-07-21T23:59:43+0800 [twisted.application.app.AppLogger#info] reactor class: twisted.internet.selectreactor.SelectReactor.
2018-07-21T23:59:43+0800 [-] Site starting on 6800
2018-07-21T23:59:43+0800 [twisted.web.server.Site#info] Starting factory <twisted.web.server.Site instance at 0x0000000004AB36C8>
2018-07-21T23:59:43+0800 [Launcher] Scrapyd 1.1.1 started: max_proc=16, runner=\'scrapyd.runner\'

   在阿里云本地输入http://localhost:6800/ 已经可以打开这个网站啦!但是我们要从本地开发机*问它并且调用它的json api,怎么办呢!输入阿里云的外网地址+端口,怎么回事,打不开?!然后我想起了阿里云服务器都必须在安全组里对实例进行配置规则才能访问该端口,好的,我去增加了6800的端口安全组,YES,在本地开发机上能访问到这个地址啦!!!为自己的机制点赞!

三、在本地开发机上安装scrapyd-client 

  看别人的步骤,输入

(python27) D:\>pip install scrapyd-client

  嗯,然后进入爬虫项目目录,输入

(python27) D:\zoom!zoom\PythonSpider\firstspider>scrapyd-deploy

  喜闻乐见的\'scrapyd-deploy\' 不是内部或外部命令,也不是可运行的程序或批处理文件。出现了。。。百度之。。。

  好吧,办法是在..\Anaconda3\envs\python27\Scripts目录下增加一个 scrapyd-deploy.bat 文件,我写的是相对的路径,各位看官自行找到自己电脑的那个目录,文件内容如下,就好像是配置个环境变量,话说linux好像不用整这个,windows受鄙视了么?!

@echo off
"C:\ProgramData\Anaconda3\envs\python27\python.exe" "C:\ProgramData\Anaconda3\envs\python27\Scripts\scrapyd-deploy" %*

  再次输入

(python27) D:\>scrapyd-deploy

    出现下面这个,bingo!scrapyd-deploy安装完毕!

Unknown target: default

 四、修改爬虫项目配置文件scrapy.cfg 

#服务器别名
[deploy:aliyun]
#服务器地址
url = http://xxx.xxx.xxx.xxx:6800/
#项目名称
project = firstspider

 五、一切准备就绪,上传我们的爬虫项目至服务器喽!大概意思就是 scrapyd-deploy 服务器别名 -p 项目名称

(python27) D:\zoom!zoom\PythonSpider\firstspider>scrapyd-deploy aliyun -p firstspider

  出现以下这个,说明上传成功!如果出现其他错误,自行百度吧,反正我遇到一个environment can only contain strings的错误,大神们有的说改scrapy或者scrapyd版本,有的说改python源码,欧弟乖乖,我还是改版本吧,python真鸡儿折腾!

Packing version 1532175294
Deploying to project "firstspider" in http://xxx.xxx.xxx.xxx:6800/addversion.json
Server response (200):
{"status": "ok", "project": "firstspider", "version": "1532175294", "spiders": 1, "node_name": "iZrtjqvcszmo77Z"}

 六、好喽,启动我们的爬虫咯!等等,卧槽,又要一个 curl  工具,windows又又又又没有!老老实实点服务器部署的那个scrapyd的网站上提示的那个链接去下载吧!最新的来一套,解压,添加系统环境变量,煎饼果子来一套!yoyoyo,checkcheckcheck!

  然后,curl ......,下面三个加上步骤五的命令,够我们新手玩了。。。 

#启动爬虫 此时参数为 -d project=项目名称 -d spider=爬虫名称
(python27) D:\zoom!zoom\PythonSpider\firstspider>curl http://xxx.xxx.xxx.xxx:6800/schedule.json -d project=firstspider -d spider=dsfootball
{"status": "ok", "jobid": "13c328408ce011e8bcabe99e10d6e876", "node_name": "iZrtjqvcszmo77Z"}
#停止爬虫 此时参数为 -d project=项目名称 -d job=那个网站上显示的job内容
(python27) D:\zoom!zoom\PythonSpider\firstspider>curl http://xxx.xxx.xxx.xxx:6800/cancel.json -d project=firstspider -d job=13c328408ce011e8bcabe99e10d6e876
{"status": "ok", "prevstate": null, "node_name": "iZrtjqvcszmo77Z"}
#删除项目 此时参数为 -d project=项目名称
(python27) D:\zoom!zoom\PythonSpider\firstspider>curl http://xxx.xxx.xxx.xxx:6800/delproject.json -d project=firstspider
{"status": "ok", "node_name": "iZrtjqvcszmo77Z"}