gpt4 book ai didi

python - 创建 bytesIO 对象

转载 作者:行者123 更新时间:2023-12-01 03:39:44 24 4
gpt4 key购买 nike

我正在开发 Scrapy Spider,尝试使用 slate 从目录中的多个 PDF 文件中提取文本。我对将实际的 PDF 保存到磁盘没有兴趣,因此建议我查看 io.bytesIO 子类 https://docs.python.org/2/library/io.html#buffered-streams .

但是我不确定如何将 PDF 正文传递给 bytesIO 类,然后传递虚拟 PDF 板岩来获取文本。到目前为止我已经:

class Ove_Spider(BaseSpider):

name = "ove"


allowed_domains = ['myurl.com']
start_urls = ['myurl/hgh/']


def parse(self, response):
for a in response.xpath('//a[@href]/@href'):
link = a.extract()
if link.endswith('.pdf'):
link = urlparse.urljoin(base_url, link)
yield Request(link, callback=self.save_pdf)

def save_pdf(self, response):

in_memory_pdf = BytesIO()
in_memory_pdf.read(response.body) # Trying to read in PDF which is in response body

我得到:

in_memory_pdf.read(response.body)
TypeError: integer argument expected, got 'str'

我怎样才能让它工作?

最佳答案

当您执行in_memory_pdf.read(response.body)时,您应该传递要读取的字节数。您想要初始化缓冲区,而不是读取它。

在 python 2 中,只需将 BytesIO 初始化为:

 in_memory_pdf = BytesIO(response.body)

在 Python 3 中,您不能将 BytesIO 与字符串一起使用,因为它需要字节。错误消息显示 response.body 的类型为 str:我们必须对其进行编码。

 in_memory_pdf = BytesIO(bytes(response.body,'ascii'))

但由于 pdf 可以是二进制数据,我认为 response.body 将是 bytes,而不是 str。在这种情况下,简单的 in_memory_pdf = BytesIO(response.body) 就可以工作。

关于python - 创建 bytesIO 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39799009/

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