鱼C论坛

 找回密码
 立即注册
查看: 1230|回复: 8

关于scrapy框架爬虫程序完成后如何响应问题?如下代码

[复制链接]
发表于 2019-1-5 23:24:30 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
最近学习了一下scrapy框架,编写了一个自动爬虫,基本能完成爬取要求,但想在其中增加一个计时功能,就是任务完成后输出用时?
   如下代码所示:我在pipelines.py这个文件下的类中增加了一个过程def close_spider(self):用来当任务完成时输出总用时,但却无效,不知为何,求助下大家有这方面经验的不烦帮小弟解答下,谢谢!

from time import time

class YxyzdpatuPipeline(object):
    def __init__(self):
        self.jshi=time()
      
    def process_item(self, item, spider):
      
        #此处有相关爬取及信息保存代码,为简洁去掉了
        return item
    def close_spider(self):
        print('用时%s分种'%((time()-self.jshi)/60))#主要的问题在此******
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-1-6 23:08:51 | 显示全部楼层
哪位路过的帮忙看下,在线,谢谢~
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-1-6 23:11:56 From FishC Mobile | 显示全部楼层
你定义__init__方法,就要一个类方法的装释器来实例它,在定义一个
@classmeth这个忘了
def  from_crawer(cls,ceawer,setings):
         return  cls()
这种表达在scrapy中的源码中到处都有,建义你去看一下源码,如果不这样定义的话,你也可以在这个类中定义一个open_spider函数,一定是这个函数名,在pipeline中也就只有这几个函数是固定的,其实也就是重写了这个方法,
在pipeline中,他也有参数的,你定的close_spider也有参数的,其实也是重写了pipeline中的方法,你可以在setting中看到他的类,比如,他配置的是de.gt.piple那么你就这样from  de.gt import  piple,这样在按下xtel键,点基鼠标就可以看他的源码了,你照着源码重写打开和关毕的方法就可以了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-1-6 23:14:27 From FishC Mobile | 显示全部楼层
xtel改成ctrl,你找到pipleline的配置,按我的方法点进去,就可以看到源码了,然后重写就可以了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-1-6 23:35:18 | 显示全部楼层
那皇沫路python 发表于 2019-1-6 23:14
xtel改成ctrl,你找到pipleline的配置,按我的方法点进去,就可以看到源码了,然后重写就可以了

我现在操作都是运行一个scrapy爬虫后直接 --nolog掉了,就只想看我代码中的print输出的信息,故不知这个框架最后的结束程序块在哪里,如果不--nolog掉的话,最后蜘蛛完成后是有一个时间提示的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-1-6 23:40:39 From FishC Mobile | 显示全部楼层
这个我知道,实际是重写类的方法,你不按照我的方法调用,你也可以这样
rom time import time

class YxyzdpatuPipeline(object):
    def  start(self):
        self.jshi=time()
      
    def process_item(self, item, spider):
          开始时self.start()
      
        #此处有相关爬取及信息保存代码,为简洁去掉了
        结束时self.close_spider()
        return item
    def close_spider(self):
        print('用时%s分种'%((time()-self.jshi)/60))#主要的问题在此
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-1-6 23:44:41 From FishC Mobile | 显示全部楼层
像你那样不按照格式写,是不会调用的,他都是固定的格式,不只有这个process_item方法的,还有几个方法,打开和关毕的方法,如果你吧这个process_item方法改调函数名,就不会调用了,都是固定的方法,固定的参数,重写是最好的,而不是像我这样写
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-1-6 23:49:48 | 显示全部楼层
那皇沫路python 发表于 2019-1-6 23:40
这个我知道,实际是重写类的方法,你不按照我的方法调用,你也可以这样
rom time import time

这样好像是当一个进程完成时就会提示当前进程任务的用时,前面传过来的好多链接任务,理想的是全部的线程任务完成后再来输出总用时多少,你上面说的那个方法,我也有百度查过,大部份都是说的重写蜘蛛完成后提示时间的那个类的方法,不过你给的这个代码,我试试,谢谢哦~
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-1-6 23:52:57 From FishC Mobile | 显示全部楼层
这个不是最好的,最好的用她的方法,在重写,我给你方法了,怎么看源码,你可以看他的源码,在重写那几个方法,这个是最好的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2026-1-13 00:19

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表