Scrapy同时启动多个爬虫以及在pycharm中debug
方法一:
1. 在项目文件夹中新建一个commands文件夹
2. 在command的文件夹中新建一个文件 crawlall.py
3.在crawlall.py 中写一个command类,该类继承 scrapy.commands
from scrapy.commands import ScrapyCommand class Command(ScrapyCommand): requires_project = True def syntax(self): return '[options]' def short_desc(self): return 'Runs all of the spiders' def run(self, args, opts): spider_list = self.crawler_process.spiders.list() for name in spider_list: self.crawler_process.crawl(name, **opts.__dict__) self.crawler_process.start()
方法二:
在scrapy.cfg同级新建一个py文件(这种方式启动比第三种快很多)
from scrapy.crawler import CrawlerProcess from scrapy.utils.project import get_project_settings process = CrawlerProcess(get_project_settings()) process.crawl('tengxun') process.start()
方法三:
在scrapy.cfg同级新建一个py文件
from scrapy import cmdline import sys import os sys.path.append(os.path.dirname(os.path.abspath(__file__))) cmdline.execute(["scrapy", "crawl", "tengxun"])
pytcharm中如何调试scarpy爬虫项目
1.直接在方法二、方法三的脚本中直接debug运行
2.可使用此方式
可参考:https://www.cnblogs.com/lsdb/p/9122970.html
1.其实就是把scarpy库中的cmdline.py复制到根项目,或者方法二、方法三中的代码写入到根目录的一个文件中
2.然后在pycharm中edit Configurations中参考如下图填入配置信息即可进行打断点,进行debug了
Name--和上边创建的spider文件相同,我这里叫quotes_spider Script path--选择当前项目下的cmdline.py,我这里是F:\PycharmProjects\tutorial\cmdline.py Parameters--crawl+要调试运行的spider名称,我这里是crawl quotes Working directory--填项目所在主目录,我这里是F:\PycharmProjects\tutorial 最后要注意点“Apply”,不要直接点“OK”
在服务器上使用的一个shell脚本
#!/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