python每天定时9点执行_[求助]关于twisted框架,如何每天定时执行一个scrapy爬虫...
RT,最近在学scrapy,写了一个简单的爬取网页数据的爬虫,利用CrawlProcess单次调用执行的时候没有问题,脚本如下,就是清空数据表然后爬取数据:
class updateBoardData:
def __init__(self):
self.db = connectMYSQL()
def update(self):
sql = "truncate table board_data;"
con = self.db.connect()
cursor = con.cursor()
cursor.execute(sql)
con.commit
cursor.close()
con.close()
print 'truncated'
process = CrawlerProcess(settings=get_project_settings())
process.crawl(board_spider)
process.start()
虽然单次执行没问题,但是在每日定时执行的脚本里调用这个类却出错了,每日执行的脚本如下,大意就是第一次执行爬虫后,每天凌晨0点定时执行爬虫:
SECONDS_PER_DAY = 24 * 60 * 60
upd = updateBoardData()
while True:
upd.update()
print datetime.now()
print 'n'+'n'+'n'+'n'
cur_time = datetime.now()
descTime = cur_time.replace(hour = 0, minute = 0, second = 0, microsecond = 0)
delaytime = cur_time - descTime
skipSeconds = SECONDS_PER_DAY - delaytime.total_seconds()
time.sleep(skipSeconds)
第一次调用该脚本会执行一次爬虫程序,但是等到0点的时候再次调用爬虫却报错了,报错信息为:
twisted.internet.error.ReactorNotRestartable
去查了一下twisted框架,发现在twisted中,reactor是单例模式,可能我在重复使用CrawlProcess的时候创建多个reactor实例,于是修改了一下爬虫的调用脚本测试了一下,只用单个实例来爬虫,修改后的代码如下:
class updateBoardData:
def __init__(self):
self.db = connectMYSQL()
self.process = CrawlerProcess(settings=get_project_settings())
self.process.crawl(board_spider)
def update(self):
con = self.db.connect()
cursor = con.cursor()
cursor.execute(sql)
con.commit
cursor.close()
con.close()
print 'truncated'
self.process.start()
a = updateBoardData()
a.update()
print 'pls wait 5s'
time.sleep(5)
a.update()
直接跑这个脚本,发现第一次执行函数没有问题,但是第二次执行函数的时候知识清空了数据表而爬虫程序却没有执行。执行的结果如下:
2017-01-19 15:40:47 [scrapy] INFO: Spider closed (finished)
pls wait 5s
truncated
到此,我的思路就卡住了,想不出问题处在哪里,定时执行scrapy爬虫应该是一个很常见的功能,可能是我的思路的方向错了,到底要怎样才能每天定时执行一个爬虫呢?
有没有人对Scrapy比较熟悉的,能够给一点意见吗?
python每天定时9点执行_[求助]关于twisted框架,如何每天定时执行一个scrapy爬虫...相关推荐
- python学习(三)scrapy爬虫框架(二)——创建一个scrapy爬虫
在创建新的scrapy爬虫之前,我们需要先了解一下创建一个scrapy爬虫的基本步骤 第一步:确定要爬取的数据 以爬取豆瓣电影数据为例: 每部电影所要爬取的信息有: 片名:<头号玩家> 导 ...
- 【python实现网络爬虫(5)】第一个Scrapy爬虫实例项目(Scrapy原理及Scrapy爬取名言名句网站信息)
Scrapy介绍 总共有五部分组成的:具体的流程可看图示 引擎.调度器.下载器.蜘蛛和项目管道 爬取流程 针对于每个URL, Scheduler -> Downloader -> Spid ...
- cron 12点执行_【技术指南】Crontab调度重复执行的任务
点击上方蓝字关注我们 Crontab是什么 Crontab是一个用于设置周期性执行任务的工具: 周期性执行的任务我们称为Cron Job: 周期性执行的任务列表我们称为Cron Table. Cron ...
- python装饰器执行顺序_python unittest单元测试框架-3用例执行顺序、多级目录、装饰器、fixtures...
1.用例执行顺序 unittest默认会按照ascii码的顺序,依次执行.类名--方法名排序,使用discover也是默认排序.如果不想使用默认排序,就使用testsuite测试集的方式. impor ...
- java ps.executeupdate()不执行_求救!在删除数据时不执行executeUpdate();
你的位置: 问答吧 -> JAVA -> 问题详情 求救!在删除数据时不执行executeUpdate(); @Override public boolean delete(UserMod ...
- python的scrapy框架的安装_Python3环境安装Scrapy爬虫框架过程及常见错误
Windows •安装lxml 最好的安装方式是通过wheel文件来安装,http://www.lfd.uci.edu/~gohlke/pythonlibs/,从该网站找到lxml的相关文件.假如是P ...
- 在python中查看关键字需要在python解释器中执行_现有代码 d={},在Python3解释器中执行 d[([1,2])] = 'b'得到的结果为( )。...
[单选题]下列字符中对应ASCII码数值最小的是哪个选项?( ) [单选题]Python解释器执行'{0},{2},{1}'.format('a','b','c')的结果为( ). [单选题]Pyth ...
- python tkinter滚动条不起作用_求助:tkinter中滚动条为什么不能用
import tkinter as tk from tkinter import ttk def cbBegin(self): pass def sel_result(): pass def get_ ...
- python 输入参数 获取不到_求助篇python3-re应用-数据无法获取
本篇文章介绍使用python抓取贷款及理财平台的数据,并将数据拼接和汇总.最终通过tableau进行可视化.与之前的python爬虫文章 不同之处在于之前是一次性抓取生产数据表,本次的数据需要每天重复 ...
最新文章
- html4视频测试方法,3.4 处理视频 - HTML5 Canvas 实战
- 053_Result结果
- 安装了git之后visual studio 2019变得很卡怎么办?(工具 --> 选项 --> 源代码管理工具【设置成无】)
- 兰州交通大学开除患癌教师符合理性
- python基础语法快速浏览
- RabbitMQ的应用场景以及基本原理简介
- 笔记本电脑黑屏但还在运作怎么办
- **Java有哪些悲观锁的实现_Redis 分布式锁的正确实现方式(Java 版)
- C++STL——vector初探
- fiddler 对https支持
- 无线传感器网络技术原理及应用 知识点
- 微信小程序-image(图片)
- java 中deff方法_怎么解决java.lang.NoclassDeffFoundError错误【转载】
- 【Java】学习日记 Day20
- python图片自动上色_自己实现黑白图片自动上色AI(一)
- Excel/pandas遍历各表拼接并对具体列进行文本筛选
- 动态令牌主要功能是什么???
- 数字IC设计随笔之一(Verdi自动添加波形脚本应用)
- 新海诚画集[秒速5センチメートル:樱花抄·铁道]
- 清理注册表 php,win10系统如何清理自带注册表