之前写的一个scrapy项目,现在要用。发现程序执行方法都忘记了。最关键的是项目中没有readme.txt。貌似有点尴尬。可见readme.md对于项目的后续维护多么重要。
在PyCharm中发现并没有直接执行scrapy的命令。于是乎就想解决这个问题。发现使用scrapy的cmdline可以解决这个问题。
执行下面的shell脚本创建main.py或者将python内容部分拷贝到文件中。
cat > main.py << EOF
#!/usr/bin/env python3
from scrapy import cmdline
cmdline.execute("scrapy crawl websiteSpider".split()) # websiteSpider这是爬虫的名字。
EOF
当然你也可以使用这个方法:
from scrapy.crawler import CrawlerProcess
from scrapy.utils.project import get_project_settings
process = CrawlerProcess(get_project_settings())
process.crawl('websiteSpider')
process.start()
这个时候就可以在pycharm中执行scrapy了。不过我发现当时写了一个更简单的脚本。这个在服务器上还是比较好使的。
脚本内容具体如下
#!/usr/bash
# 关闭程序的方法
killProgramme(){
while [ $# != 0 ];do #所有参数的长度
pcount=`ps -ef |grep $1|grep -v grep |wc -l`
if [[ ${pcount} -ge 1 ]] ; then
kill -9 `ps -ef |grep $1|grep -v grep|awk '{print $2}'`
echo "kill process success!"
fi
shift #将第一个参数弹出
done
}
# 部署程序的方法
deploy_spider()
{
killProgramme $1
cd /your/project/path #启动文件的路径,这个需要更改,当然更改为当前目录。如为当前目录,定时任务的时候会执行失败
cat /dev/null > logs.log
nohup /root/anaconda3/bin/scrapy crawl $1>/dev/null 2>&1 &
echo "deploy $1 success!"
}
PS3='please select websiteSpider or updateWebsite: '
echo
select choose in "websiteSpider" "updateWebsite" "killAll" "restartAll" "showProcess" #项目中有两个爬虫文件,所以有了多个
do
case ${choose} in
websiteSpider)
echo "you select the websiteSpider"
deploy_spider "websiteSpider"
;;
updateWebsite)
echo "you select the updateWebsite"
deploy_spider "updateWebsite"
;;
killAll)
echo "you select killAll"
killProgramme "websiteSpider" "updateWebsite"
;;
restartAll)
echo "you select restartAll"
deploy_spider "websiteSpider"
deploy_spider "updateWebsite"
;;
showProcess)
echo "you select show process"
ps -ef |grep scrapy
;;
*)
echo "perhaps you need help!"
;;
esac
break
done