TypeError:+不支持的操作数类型:'Tag'和'str'

时间:2013-09-06 19:07:13

标签: python beautifulsoup screen-scraping

在我的下面的代码中,我试图将附加到值的每个开始和结束,以便我可以在运行我的python脚本后直接执行SQL插入操作。

以下是代码

print today,","+ (a['href'] if a else '`NULL`')+",", (a.string if a else 'NULL, NULL')+ "," +",".join(re.findall("'([a-zA-Z0-9,\s]*)'", (a['onclick'] if a else 'NULL, NULL, NULL, NULL, NULL, NULL')))+","+ ", ".join([project] + area),","+pdates+""

这是我的整个code

我得到output。希望我清楚自己想要什么。

2 个答案:

答案 0 :(得分:2)

问题在于:

(a['href'] if a + '1' else '`NULL`') 

aTag类的实例,1是一个字符串。

我想你只需要if a支票:

(a['href'] if a else '`NULL`')

而且,仅供参考,请更好地使用string formattingformat,而不是使用+手动连接字符串。

而且,使用参数化的sql语句更好(参见sqlite3 docs):

query = """
INSERT INTO
    `property`
    (`date`,`Url`,`Rooms`,`place`,`PId`,`Phonenumber1`,`Phonenumber2`,`Phonenumber3`,`Typeofperson`,` Nameofperson`,`typeofproperty`,`Sq.Ft`,`PerSq.Ft`,`AdDate`,`AdYear`)
VALUES
    (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)
"""

# define your field values as a list
values = [today, a['href'] if a else 'NULL', ... ]

# execute
cursor.execute(query, values)

答案 1 :(得分:1)

转过来:

print today,","+ (a['href'] if a else '`NULL`')+",", (a.string if a else 'NULL, NULL')+ "," +",".join(re.findall("'([a-zA-Z0-9,\s]*)'", (a['onclick'] if a else 'NULL, NULL, NULL, NULL, NULL, NULL')))+","+ ", ".join([project] + area),","+pdates+""

进入这个:

# create your format string
keys = 'date', 'url', 'rooms',  # etc...
fmt_s = ', '.join('{{{key}}}'.format(key=key) for key in keys)
# yields: '{date}, {url}, ...'

# build up the necessary values
params = {'date': today}
params['url'] = a['href'] if a else '`NULL`'
params['rooms'] = a.string if a else 'NULL, NULL'

# etc...

# first format fills in the values from the dict
# second format adds the parens
print("({0})".format(fmt_s.format(**params)))

你可以完成剩下的工作了吗?

使用参数化SQL比使用手动构建字符串更好。