2016-10-01 93 views
1

我正在使用scrapy。在我目前的項目中,我從PDF文件中捕獲文本。我想把它發送到一個管道進行解析。現在,我有:直接發送內容到scrapy管道

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) 

這可能嗎?

回答

1

根據Scrapy documentation,蜘蛛回調必須或者返回一個Request實例(S),字典(一個或多個)或Item實例(或多個):

這種方法,以及任何其他請求回調,必須返回一個 可迭代的請求和/或字典或項目對象。

所以,如果你不想定義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) 

    return {'pdf_text': doc} 
+0

非常感謝您! – user61629