本文主要是介绍记一次 python 3.6.4安装Scrapy 从lxml导入etree错误,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
文章目录
- 问题
- 将scrapy放到定时任务中执行,不适用scrapyd
问题
对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 $resif [ -n "$res" ]thenecho $reselse#如果不存在,则运行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
这篇关于记一次 python 3.6.4安装Scrapy 从lxml导入etree错误的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!