记一次 python 3.6.4安装Scrapy 从lxml导入etree错误

问题

对python不熟悉,使用scrapy做了一个爬虫后准备部署到客户服务器,服务器版本是Centos 7python版本是3.6.4;安装scrapy可以正常安装,但是运行scrapy提示etree导入出错;各种搜索后都不能正常使用(还不知道有virtualenv这种东西);有的说是安装lxml版本3.4,但是scrapy2.0.1都要求3.5.0的lxml;我是使用2.4.1scrapy写的,如果使用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脚本;使用定时任务定时执行

  1. 创建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
  1. 给脚本添加执行的权限
    chmod +x test.sh
  2. 添加定时任务, crontab -e ,添加如下内容(每5分钟执行一次test.sh
    */5 * * * * /root/test.sh
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值