问题
对python不熟悉,使用scrapy
做了一个爬虫后准备部署到客户服务器,服务器版本是Centos 7
,python
版本是3.6.4
;安装scrapy
可以正常安装,但是运行scrapy
提示etree
导入出错;各种搜索后都不能正常使用(还不知道有virtualenv
这种东西);有的说是安装lxml
版本3.4
,但是scrapy2.0.1
都要求3.5.0的lxml
;我是使用2.4.1
的scrapy
写的,如果使用1.*
版本的scrapy
怕程序出问题,所以找其他方法,docker
可以实现但是折腾也不少最后是卡在连接宿主机的mysql
上由于是客户的主机不太敢随意变更mysql
的服务和修改配置,放弃;
最后使用virtualenv
安装了python3.8
后才可以使用的。使用virtualenv
一定注意不能使用默认的安装包,也就是如果默认python3.6
安装了scrapy
,那么即使是使用了virtualenv
也是不可以的,它还是会以python3.6
来执行scrapy
,错误里面有python3.6
的字样(好像可以添加参数-no-site-packages
,具体忘记了,但是我可能操作不正确,导致不起做作用);所以我就是卸载了系统安装的scrapy
,在virtualenv
的环境里安装scrapy
才成功。
将scrapy放到定时任务中执行,不适用scrapyd
假如有多个爬虫需要不间断运行,那么写一个shell脚本;使用定时任务定时执行
- 创建shell脚本
test.sh
#!/bin/bash
#p1=hu
#p2=ty
#s=`ps -ef|grep $p1|grep -v 'grep'|awk '{print $2 $3 $4}'`
#echo $p1
#echo $s
#cd /root/test_pro/shangpuSpider/pro2/bin
#m=`ls `
#echo $m
#m=`./scrapy list`
#echo $m
#进入目录
cd /root/test_pro/shangpuSpider/pro2/bin
#循环列表
for item in hu ty ly lz km sq xn xj yc
do
#查找是否在运行
res=`ps -ef|grep "scrapy crawl ${item}"|grep -v 'grep'|awk '{print $1 $2}'`
#echo $res
if [ -n "$res" ]
then
echo $res
else
#如果不存在,则运行
echo 'not found res'
nohup ./scrapy crawl ${item} -s ENV=prod 2>&1 &
fi
done
- 给脚本添加执行的权限
chmod +x test.sh
- 添加定时任务, crontab -e ,添加如下内容(每5分钟执行一次
test.sh
)
*/5 * * * * /root/test.sh