操作系統: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“形式的字符串。
解決方法:
1
//使用strftime和strptime函數,有點類似c語言的printf和scanf形式。
2
//strftime函數可以把datetime格式轉換成指定格式的字符串。
3
//strptime函數則是反過來,把字符串轉換成datetime格式。
4
//兩個函數都需要datetime包
?
1
#首先對于網頁時間格式轉換成datetime。strftime函數用法后面講。
2
GMT_FORMAT?=?'%a, %d %b %Y %H:%M:%S GMT'
3
#輸出格式的模式字符串
4
TIME?=?'Wed, 04 Jun 2014 13:06:02 GMT'
5
#對應的時間字符串
6
datetime.datetime.strptime(TIME, GMT_FORMAT)
?
1
#當前時間可以直接使用datetime不需要time包
2
datetime.datetime.now()
?
PS:
1
#strftime用法
2
# http包頭時間格式顯示當前時間
3
GMT_FORMAT?=?'%a, %d %b %Y %H:%M:%S GMT'
4
datetime.datetime.utcnow().strftime(GMT_FORMAT)
?python的時間格式化輸出對照表:
說明
符號
星期幾的簡寫 Weekday name, abbr.
%a
星期幾的全稱 Weekday name, full
%A
月份的簡寫 Month name, abbr.
%b
月份的全稱 Month name, full
%B
標準的日期的時間串 Complete date and time representation
%c
十進制表示的每月的第幾天 Day of the month
%d
24小時制的小時 Hour (24-hour clock)
%H
12小時制的小時 Hour (12-hour clock)
%I
十進制表示的每年的第幾天 Day of the year
%j
十進制表示的月份 Month number
%m
十時制表示的分鐘數 Minute number
%M
十進制的秒數 Second number
%S
第年的第幾周,把星期日做為第一天(值從0到53)Week number (Sunday first weekday)
%U
十進制表示的星期幾(值從0到6,星期天為0)weekday number
%w
每年的第幾周,把星期一做為第一天(值從0到53) Week number (Monday first weekday)
%W
標準的日期串 Complete date representation (e.g. 13/01/08)
%x
標準的時間串 Complete time representation (e.g. 17:02:10)