gpt4 book ai didi

python - 我的 Scrapy/Elasticsearch 脚本返回 "Unable to serialize"错误

转载 作者:太空宇宙 更新时间:2023-11-03 14:23:33 24 4
gpt4 key购买 nike

所以,伙计们,在过去的 18 小时里,我一直在拼命寻找代码中错误的解决方法,我认为是时候寻求一些帮助了。

我正在构建一个网络抓取工具,其目标是下载页面、抓取 anchor 文本、内部链接、引用网址并将数据保存到数据库。这是我的 Scrapy 代码的相关部分;

def parse_items(self, response):
item = InternallinkItem()

# Current URL
item["current_url"] = response.url

# get anchor text and clean it
anchor = response.meta.get('link_text')
item["anchor_text"] = " ".join(anchor.split())


# get the referrer URL (Problem is here)
referring_url = response.request.headers.get('Referer')
item["referring_url"] = referring_url


yield item

我使用的技术是Python、Scrapy、Elasticsearch。它们都是最新的,我的开发环境是 Windows。当我运行上面的代码时,我遇到了这个错误;

raise TypeError("Unable to serialize %r (type: %s)" % (data, type(data)))

TypeError: Unable to serialize b'https://example.com' (type: <class 'bytes'>)

因此,经过多次尝试和错误,我能够追踪并查明问题所在。当我删除获取引荐来源网址的部分时,一切正常。它获取了我想要的数据并成功保存到Elasticsearch。

作为一个编程新手,我不知道如何继续。

我尝试过,以其他方式获取引用网址,但没有成功。

尝试编写自己的管道,而不是使用 scrapy-elasticsearch 库,但遇到了相同的错误,也尝试将类型从 byte 更改为 STR,好吧,你猜对了,它也不起作用。

任何帮助将不胜感激,因为我真的被困在这里了!

编辑:我的settings.py文件;

ITEM_PIPELINES = {
'scrapyelasticsearch.scrapyelasticsearch.ElasticSearchPipeline': 500
}

ELASTICSEARCH_SERVERS = ['localhost']
ELASTICSEARCH_INDEX = 'myindex'
ELASTICSEARCH_TYPE = 'internallink'
#ELASTICSEARCH_UNIQ_KEY = ['current_url']

最佳答案

好吧,在喝了 9 杯咖啡并用头撞墙 20 小时后,我解决了这个问题。它是如此简单,我几乎羞于将其发布在这里,但这里什么也没有;

当我昨天第一次收到错误时,我尝试像这样解码引荐来源网址

    referring_url = response.request.headers.get('Referer')
item["referring_url"] = referring_url.decode('utf-8')

它不起作用......直到我将其更改为这个;

    referring_url = response.request.headers.get('Referer').decode('utf-8')
item["referring_url"] = referring_url

我不知道为什么或如何,但它有效。

非常感谢@alecxe 和@furas 将我推向正确的方向。

关于python - 我的 Scrapy/Elasticsearch 脚本返回 "Unable to serialize"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47782447/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com