私は、スレート(https://pypi.python.org/pypi/slate)を使用して、ディレクトリ内の複数のPDFファイルを抽出しようとしている、スパイシースパイダーに取り組んでいます。私は実際のPDFをディスクに保存することに興味がないので、io.bytesIOサブクラスhttps://docs.python.org/2/library/io.html#buffered-streamsを調べることをお勧めしました。 Creating bytesIO objectに基づいて、私はbytesIOクラスをpdf本体で初期化しましたが、データをスレートモジュールに渡す必要があります。これまでのところ私が持っている:私は取得しています作成後にbytesIOオブジェクトにアクセスする
def save_pdf(self, response):
in_memory_pdf = BytesIO(response.body)
with open(in_memory_pdf, 'rb') as f:
doc = slate.PDF(f)
print(doc[0])
:
in_memory_pdf.read(response.body)
TypeError: integer argument expected, got 'str'
がどのように私はこの作業を得ることができますか?
編集:
with open(in_memory_pdf, 'rb') as f:
TypeError: coercing to Unicode: need string or buffer, _io.BytesIO found
編集2:
def save_pdf(self, response):
in_memory_pdf = BytesIO(bytes(response.body))
in_memory_pdf.seek(0)
doc = slate.PDF(in_memory_pdf)
print(doc)
'in_memory_pdf = BytesIO(bytes(response.body))'を試してください。 – martineau
ありがとう、これは最初の問題を解決しました! – user61629
BytesIOの代わりに['StringIO'](https://docs.python.org/2/library/stringio.html#module-StringIO)を試してみてください。また、 'with open(...)as f'を必要とせず、作成後に' in_memory_pdf.seek(0) 'で巻き戻してから' in_memory_pdf'を使用してください。_instead_ of ' f 'である。 – martineau