首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >显示异常的Pipeline.py

问显示异常的Pipeline.py
EN

Stack Overflow用户
提问于 2013-07-30 18:46:40
回答 2查看 173关注 0票数 0

我正在建立一个小项目在Scrapy和是新的Scrapy。当我运行我的蜘蛛时,它在我的管道中显示一个异常错误,上面写着:

项目‘’Number‘,exceptions.IndexError:列出超出范围的索引

我的管道文件:

代码语言:javascript
复制
import sys
from scrapy.utils.python import unicode_to_str
import MySQLdb
from project2.settings import MYSQL


# the Pipeline settings.
class MySQLStorePipeline(object):

    def __init__(self):
        db=MySQLdb.connect(user='root', passwd='', db='project2', host='127.0.0.1', charset = "utf8", use_unicode = True)
        self.c=db.cursor()

    def process_item(self, item, spider):
        try:
            self.c.execute("""INSERT INTO crawlerapp_directory (Catogory, Bussiness_name, Description, Number, Web_url)  
                            VALUES (%s, %s, %s, %s, %s)""",
                           (item['Catogory'][0],
                            item['Bussiness_name'][0],
                            item['Description'][0],
                            item['Number'][0],
                            item['Web_url'][0]))

        except MySQLdb.Error, e:
            print "Error %d: %s" % (e.args[0], e.args[1])
            sys.exit (1)

        return item

我的爬行器很好地爬行,但是它显示了上面的异常错误,并且也没有将被抓取的数据保存到MySQL DB中。

请指导我解决这些问题。

EN

回答 2

Stack Overflow用户

发布于 2013-07-31 15:51:48

在访问第一个元素:value[0] if value之前,确保检查一个列表至少包含一个条目

代码语言:javascript
复制
class MySQLStorePipeline(object):
    def __init__(self):
        db = MySQLdb.connect(host='127.0.0.1', user='root', passwd='',
            db='project2', charset="utf8", use_unicode=True)
        self.cursor = db.cursor()

    def process_item(self, item, spider):
        def Item(field):
            return item.get(field)[0] if item.get(field) else ''

        self.cursor.execute("""INSERT INTO crawlerapp_directory
            (Category, Business_name, Description, Number, Web_url)
            VALUES ('%s', '%s', '%s', %s, '%s')""", (
                Item('Category'),
                Item('Business_name'),
                Item('Description'),
                Item('Number'),
                Item('Web_url'),
            ))

        return item
票数 1
EN

Stack Overflow用户

发布于 2013-07-30 18:51:34

好像“号码”是空的。确认它包含您想要的内容。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17954964

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档