0
치료를 사용하여 링크가 포함 된 테이블을 구문 분석하고 json에 저장합니다. 표의 링크는 추가 세부 정보를 포함하며 다른 JSON으로 가져와 저장됩니다. (이 예 : https://docs.scrapy.org/en/latest/topics/exporters.html)치료 파이프 라인 내보내기 개체가 인스턴스화되지 않습니다.
이 작업을 수행하려면 파이프 라인을 사용하여 항목 유형을 확인하고 결과를 적절한 json에 저장하십시오. 그러나, 나는 이상한 약간의 오류에 갇혀있다. 아래를 참조하십시오 : 오류
from scrapy import signals
from scrapy.exporters import JsonItemExporter
from for_icu import items
class ListPipeline(object):
def __init__(self):
self.files = {}
@classmethod
def from_crawler(cls, crawler):
pipeline = cls()
crawler.signals.connect(pipeline.spider_opened, signals.spider_opened)
crawler.signals.connect(pipeline.spider_closed, signals.spider_closed)
return pipeline
def spider_opened(self, spider):
print("spider_opened")
file_table = open('%s_table.json' % spider.name, 'w+b')
self.files[spider].append(file_table)
self.exporter1 = JsonItemExporter(file_table)
self.exporter1.start_exporting()
file_detail = open('%s_detail.json' % spider.name, 'w+b')
self.files[spider].append(file_detail)
self.exporter2 = JsonItemExporter(file_detail)
self.exporter2.start_exporting()
def spider_closed(self, spider):
print("spider_closed")
self.exporter1.finish_exporting()
self.exporter2.finish_exporting()
for file in self.files.pop(spider):
file.close()
def process_item(self, item, spider):
print("process_item")
if isinstance(item, items.UniListItem):
self.exporter1.export_item(item)
return item
elif isinstance(item, items.UniDetail):
self.exporter22.export_item(item)
return item
:
2017-12-27 11:41:15 [scrapy.core.scraper] ERROR: Error processing {'country': ('Finland',),
'country_code': ('fi ',),
'u_link': ('http://www.xxxxxxx.xxx/xxxxxxx/xxxx.htm',),
'u': (' pisto',)}
Traceback (most recent call last):
File "/usr/local/lib/python3.6/site-packages/twisted/internet/defer.py", line 653, in _runCallbacks
current.result = callback(current.result, *args, **kw)
File "/Users/website_scrapy/for_icu/for_icu/pipelines.py", line 31, in process_item
self.exporter.export_item(item)
AttributeError: 'ListPipeline' object has no attribute 'exporter1'
제가 ... 여기 실종 시간의 지난 몇에서이에 붙어되는 것을 알려주세요 ...
'print()'를 메소드에 넣고 실행되는 메소드를 확인하십시오. 왜'spider_opened'를 사용합니까? [examples] (https://docs.scrapy.org/en/latest/topics/item-pipeline.html) 에서처럼 'open_spider'를 사용할 수 없습니까? – furas
음, 네 말이 맞아, 배차자와 그 방법은 반대된다. 예제에서 언급 한 방법으로 메소드를 변경했습니다. print()를 사용하여 인쇄 한 출력을 볼 수 있습니다. 그러나 두 개의 파일을 열고 각각의 항목 객체를 쓰고 싶지만 오류가 발생했습니다.''파이프 라인 객체에는 속성 파일이 없습니다. '파이프 라인 객체에는 exporter1' 속성이 없습니다. 위의 수정 된 코드 게시하기 – nikhil14
'__init__'에'self.exporter1 = None'을 추가해야합니다. –