Scrapy的时间转换问题

  • A+
所属分类:编程开发

使用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)

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: