Python解析html数据并存储到数据库中

时间:2016-06-01 10:34:32

标签: python html postgresql insert beautifulsoup

一 这是困扰我两天,我是python的新人,我想解析html数据如下链接:http://movie.walkerplus.com/list/2015/12/

然后将数据存储到名为movie_db的postgresql数据库中,并且有一个名为films的表,它由以下命令创建:

CREATE TABLE films (
title       varchar(128) NOT NULL,
description varchar(256) NOT NULL,
directors   varchar(128)[],
roles       varchar(128)[]
);

我已经解析了数据,标题,描述,导演,角色有三个列表数据。例如title = [' a',.....,' b'],description = [' c',....,&#39 ; f'],导演= [' d',.....,' g'],角色= [[' f',&# 39; g','],......,[' h',' t',' u&#39 ;]]

sql =" INSERT INTO电影(标题,描述,导演,角色)
      VALUES
      (%s,%s,%s,%s);"      对于邮件中的obj(t,des,dirt,r):      cur.execute(cur.mogrify(sql,obj))      conn.commit()

有错误:

 psycopg2.DataError: malformed array literal: "サム・メンデス"

LINE 1: ...ームズ・ボンドの戦いを描く『007』シリーズ第24作', 'サム・メ...
                                                         ^
DETAIL:  Array value must start with "{" or dimension information.     

1 个答案:

答案 0 :(得分:1)

我知道这个错误。这意味着您正在尝试将字符串值插入到数组列中。您可以按如下方式验证SQL。

sql2 = cur.mogrify(SQL, obj)
print sql2

从html获取的导演和角色是字符串列表。所以在zip函数之后,obj包含dir和角色作为字符串。

对于您的情况,您只想插入1行。所以可能没有必要拉链。

我对您使用的API不熟悉,但是您可以尝试在插入之前打印从html接收的值吗?我可以为您提供所需的确切SQL。

编辑关于新阵列的语法

director数组是一种简写语法,用于创建一个新数组,每个元素都作为数组。在更易读的语法中,它将与下面相同

director = ['tom', 'jack', 'john']
directors = []

for d in director:
    elem_as_list = []
    elem_as_list.append(d)
    directors.append(elem_as_list)
print director
print directors
print type(director[0])
print type(directors[0])

这是输出

['tom', 'jack', 'john']
[['tom'], ['jack'], ['john']]
<type 'str'>
<type 'list'>