使用
scrapy
爬虫时遇到的时间转换问题。
前言
环境
操作系统:fedora
开发语言:python
爬虫框架:scrapy
数据库:mysql
数据库连接模块:mysqldb
目标
将网页生成时间和网页抓取的当前时间输入到数据库中。
错误
在执行代码时,出现Warning: Out of range value for column ‘f_grap_time’ at row 1这样的错误。直接翻译是,数据位数超过字段能存的最大长度。
分析
问题原因
事实上是数据格式的问题。上传时数据直接调用了网页http头的Date和time函数返回的时间。但是数据库要求是datetime格式。
抓下的网页的 response.headers["Date"]
保存了网页的生成时间,读取出来其实就是字符串。格式类似这样Wed, 04 Jun 2014 13:06:02 GMT
。
使用time函数得出的时间是一个浮点数,类似1401887801.07
。
数据库要求的输入格式是datetime
格式,可以是11
位的10
进制数字,或者2014-06-04 13:06:02
形式的字符串。
解决方法
使用strftime和strptime函数,有点类似c语言的printf和scanf形式。
strftime函数可以把datetime格式转换成指定格式的字符串。strptime函数则是反过来,把字符串转换成datetime格式。
注意:两个函数都需要datetime包
代码
#首先对于网页时间格式转换成datetime。strftime函数用法后面讲。
GMT_FORMAT = '%a, %d %b %Y %H:%M:%S GMT'
#输出格式的模式字符串
TIME = 'Wed, 04 Jun 2014 13:06:02 GMT'
#对应的时间字符串
datetime.datetime.strptime(TIME, GMT_FORMAT)
#当前时间可以直接使用datetime不需要time包
datetime.datetime.now()
一些时间格式代码
http包头时间格式显示当前时间
GMT_FORMAT = '%a, %d %b %Y %H:%M:%S GMT'
datetime.datetime.utcnow().strftime(GMT_FORMAT)
按corn格式显示当前时间
#minute hour day month dayofweek
import datetime
CORN_FORMAT = '%M %H %d %m %w'
datetime.datetime.utcnow().strftime(CORN_FORMAT)
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
广告
暂无评论内容