可能重复:
convert list to string to insert into my sql in one row in python scrapy
我编写了一个脚本来将数据插入到mysql中,如下所示,但它将items
列表中的一个项目插入到mysql数据库中344次。我做错了什么?
def parse(self, response):
hxs = HtmlXPathSelector(response)
sites = hxs.select('//ul/li')
con = MySQLdb.connect(
host="localhost",
user="dreamriks",
passwd="dreamriks",
db="scraped_data"
)
cur = con.cursor()
items = []
for site in sites:
items = [site.select('//h2').extract()]
item = [site.select('//h3').extract()]
meta = [site.select('//meta').extract()]
for index in range (len( items)):
str = items[index]
cur.execute("""Insert into h2_meta(h2) Values(%s)""",(str))
答案 0 :(得分:3)
看起来你正在覆盖你的列表,而不是在你这样做时附加到它们:
for site in sites:
items = [site.select('//h2').extract()]
item = [site.select('//h3').extract()]
meta = [site.select('//meta').extract()]
我想你可能想把它改成:
for site in sites:
items.append(site.select('//h2').extract())
item.append(site.select('//h3').extract())
meta.append(site.select('//meta').extract())
答案 1 :(得分:1)
此
site.select('//h2').extract()
将返回该特定网站中所有“h2”标记的列表。附加此列表后,您需要遍历“项目”列表中的每个元素,因为它们都包含列表。 第二次迭代应该是这样的。
for elem in range( len( items )):
for index in range( len(elem) ):
str = elem[index]
cur.execute("""Insert into h2_meta(h2) Values (%s)""",(str))
同时避免使用'str'之类的关键字作为变量名,并在追加每个列表之前声明它们。