postgresql Scrapy [scrapy.core.scraper]错误:处理时出错

cvxl0en2  于 2022-11-23  发布在  PostgreSQL
关注(0)|答案(1)|浏览(120)

我正在尝试使用Scrapy从一个网站上抓取一些数据。我正在使用以下代码行抓取数据:
`

def parse(self, response):
    data = json.loads(response.body)
    flat = FlatItem()
    for item in data["_embedded"]["estates"]:
        flat['flat'] = item['price']
        yield flat

而FlatItem()包含一个类似下面的字段:

from scrapy.item import Item, Field

class FlatItem(Item):
    flat = Field()

然后,我尝试将其粘贴到postgresql数据库中,使用如下命令:

def process_item(self, item, spider):

    self.current.execute("""insert into flats(content, tags, author) values(%s)""", (
        item["flat"],
    ))

    self.connection.commit()
    return item

`
不幸的是,当我试图运行爬行器时,它给了我一个如下所示的异常:

2022-11-17 11:32:07 [scrapy.core.scraper] ERROR: Error processing {'flat': 3299000}

回溯(最近的呼叫排在最后):文件“/用户/XY/.pyenv/版本/3.10.7/lib/python3.10/站点包/twisted/internet/defer.py”,第892行,在运行中回调当前。结果=回调(#类型:第285行,在f中返回deferred_from_科罗(coro_f(*coro_args,**coro_kwargs))pipelines.py第29行,在process_item self.current中执行(“"“插入平面(内容、标签、作者)值(%s)""",(psycopg2.errors.InFailedSqlTransaction:当前事务被中止,忽略命令直到事务块结束
我找了几个小时的答案,但一无所获。
你知道吗?
尝试将scrappy中的数据传递到postgresql数据库,但预期会发生错误。

jtw3ybtb

jtw3ybtb1#

可能发生的情况是,您的某个项具有None值,而postgresql不接受None作为值。
尝试将管道process_item()更改为:

def process_item(self, item, spider):
    print(item)
    print(item["flat"])
    if item["flat"]:
        self.current.execute(
           """insert into flats(content, tags, author) values(%s)""", 
           (item["flat"],)
         )
         self.connection.commit()
    return item

相关问题