我正在使用scrapy。在我目前的项目中,我正在从pdf文件中捕获文本。我想将它发送到管道进行解析。现在我有:
def get_pdf_text(self, response):
in_memory_pdf = BytesIO(bytes(response.body))
in_memory_pdf.seek(0)
doc = slate.PDF(in_memory_pdf)
item =OveItem()
item['pdf_text']=doc
return item
pipelines.py
class OvePipeline(object):
def process_item(self, item, spider):
.......
return item
这样可行,但我认为只是直接产生结果会更简洁,而不必将结果附加到项目以使其进入管道,例如:
def get_pdf_text(self, response):
in_memory_pdf = BytesIO(bytes(response.body))
in_memory_pdf.seek(0)
yield slate.PDF(in_memory_pdf)
这可能吗?
答案 0 :(得分:2)
根据Scrapy documentation,蜘蛛回调必须返回Request
实例,字典(ies)或Item
实例:
此方法以及任何其他请求回调必须返回 可迭代的Request和/或dicts或Item对象。
所以,如果你不想定义一个特殊的"项目"对于pdf内容,只需将其包装成dict:
def get_pdf_text(self, response):
in_memory_pdf = BytesIO(bytes(response.body))
in_memory_pdf.seek(0)
doc = slate.PDF(in_memory_pdf)
return {'pdf_text': doc}