2012-01-31 63 views
0

Possible Duplicate:
convert list to string to insert into my sql in one row in python scrapyUnboundLocalError:分配

我試圖寫HTML頁面直接到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() 
    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)):    #<-- exception raises here 
     str = items[index] 
     cur.execute("""Insert into h2_meta(h2) Values(%s)""",(str)) 
    con.commit() 
    con.close() 

上面的代碼提供了以下錯誤:

exceptions.UnboundLocalError: local variable 'items' referenced before assignment 
+0

你需要用更合適的標題提出更好的問題。這個問題對其他人來說幾乎沒有任何價值,即使這樣做,人們會如何尋找它?此外,審查用戶名和密碼可能是一個好主意。 – nfirvine 2012-02-01 01:57:13

回答

2

你的縮進被打破。縮進塊

for index in range (len(items)): 
    str = items[index] 
    cur.execute("""Insert into h2_meta(h2) Values(%s)""",(str)) 

剩餘4個空格。

+0

hi Tichodroma, 我將所有內容都分配給第一個循環中的列表項,然後將每個列表項移動到mysql數據庫中的一行。你所建議的方法是否適合這件事? – Shalini 2012-01-31 12:43:32

+0

可能不是。在這種情況下,請按原樣保留凹痕,但在網站循環中爲站點添加'items = []'。問題:你使用'item'和'meta'做什麼? – 2012-01-31 12:46:44

+0

蜘蛛抓取大約1000個URL並在第一個循環中從它們中提取h2和元標記,然後將列表項和元的每個元素插入到mysql數據庫的一行中。所以使用項目和元作爲列表 – Shalini 2012-01-31 12:50:40

2

看起來你有一個縮進問題。 for index in range(len(items))部分for site in sites循環,對吧?

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)):    # <-- make sure this has same 
      str = items[index]      # level of indenting as previous lines 
      cur.execute("""Insert into h2_meta(h2) Values(%s)""",(str)) 
+0

我將所有內容分配給第一個循環中的列表項,然後將每個列表項移動到mysql數據庫中的一行。你所建議的方法是否適合這件事? – Shalini 2012-01-31 12:46:39

0

如果for site in sites:不重複,因爲sites爲空,則items永遠不會被初始化。

當您在for index in range (len(items)):中引用它時,代碼假設items已初始化。

+0

請給我提供一些解決方案。我無法更正此代碼。 – Shalini 2012-01-31 12:48:03

相關問題