2012-01-31 73 views
0

可能重複:
convert list to string to insert into my sql in one row in python scrapy問題產生的python列表,並將其存儲在MySQL數據庫中

我寫了一個腳本,將數據插入到mysql的,如下圖所示,但它將一個items列表中的一個項目344次插入mysql數據庫。我究竟做錯了什麼?

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)) 
+3

更改標題。應該說這個問題是關於什麼的。 – Maciek 2012-01-31 13:26:30

回答

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()) 
+0

好吧ralfe讓我試試這個 – Shalini 2012-01-31 13:31:48

+0

嘿ralfe。根據你的建議,根據你的建議,它仍然將一個h2標籤打印成46行。 meas 46行包含從一個URL中刪除的相同數據。你可以幫我這個 – Shalini 2012-01-31 13:36:12

+0

好吧,試着改變'在範圍內的索引(len(items)):'爲'str中的項目:'然後刪除下一行('str = items [index]')。 – ralfe 2012-01-31 14:57:07

1

site.select('//h2').extract() 

will ret列出該特定網站中所有'h2'標籤的列表。在附加這個列表之後,你需要遍歷'items'列表中的每個元素,因爲它們都包含一個列表。 第二次迭代應該看起來像這樣。

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'這樣的關鍵字作爲變量名,並在追加到每個列表之前聲明它。

+0

不幸的是,這並不奏效。產生錯誤 – Shalini 2012-01-31 17:44:23

相關問題