刮刮博客并将日期保存到数据库会导致DateError:未知的日期格式

时间:2015-06-09 16:14:27

标签: python sqlite date web-scraping

我正在开展一个项目,在这个项目中我搜索了许多博客,并将选择的数据保存到SQLite数据库。例如帖子的标题,发布的日期以及帖子的内容。 最终的目标是进行一些花哨的文本分析,但是现在我将数据写入数据库时​​遇到了问题。 我使用Python的库模式。 (可以找到关于数据库的模块here

我现在正忙着第三篇博客。来自其他两个博客的数据已经保存在数据库中,对于第三个类似结构的博客,我调整了代码。

有几个功能很好地相互集成,它们工作正常。我也能以正确的方式访问所有数据,当我在IPython Notebook中试用它时它工作正常。当我在控制台中仅为一个博客页面(它共有43个)运行代码作为试用版时,它也可以在数据库中很好地保存所有内容。但是,当我再次运行43页时,它引发了数据错误。

现在我在函数中有一些注释和打印语句用于调试。问题似乎发生在函数parse_post_info中,该函数将字典传递给遍历所有博客页面的函数并打开每个帖子,然后保存函数parse_post_info返回的字典 IF 它不是None,但我认为它是空的,因为有关日期格式的内容出错了。

另外 - 为什么代码工作一次,相同的代码第二次抛出dateerror:

  

DateError:'2015-06-09T07:01:55 + 00:00'的未知日期格式

这是功能:

from pattern.db import Database, field, pk, date, STRING, INTEGER, BOOLEAN, DATE, NOW, TEXT, TableError, PRIMARY, eq, all
from pattern.web import URL, Element, DOM, plaintext


def parse_post_info(p):
""" This function receives a post Element from the post list and 
    returns a dictionary with post url, post title, labels, date.
"""
try:    
    post_header = p("header.entry-header")[0]
    title_tag = post_header("a < h1")[0]
    post_title = plaintext(title_tag.content)
    print post_title
    post_url = title_tag("a")[0].href
    date_tag = post_header("div.entry-meta")[0]
    post_date = plaintext(date_tag("time")[0].datetime).split("T")[0]
    #post_date = date(post_date_text)
    print post_date
    post_id = int(((p).id).split("-")[-1])
    post_content = get_post_content(post_url)
    labels = " "
    print labels
    return dict(blog_no=blog_no,
                post_title=post_title, 
                post_url=post_url,
                post_date=post_date,
                post_id=post_id,
                labels=labels,
                post_content=post_content
                )
except:
    pass

1 个答案:

答案 0 :(得分:0)

date()函数返回一个新的Date,一个方便的Python的datetime.datetime子类。它需要一个整数(Unix时间戳),一个字符串或现在。

您可以使用当地时间进行差异化。

格式为“YYYY-MM-DD hh:mm:ss”。

可以找到转换时间格式here