2012-01-31 57 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

相关问题