Scrapy 데이터를 json에 저장

2362 단어
Scrapy 데이터를 json에 저장
json 저장된 pipeline 만들기
pipeline 처리
import codecs

이 가방은 인코딩을 잘 처리하여 각종 인코딩이 번잡한 작업을 피할 수 있다.
새 pipeline을 만듭니다. 구조 함수codecs에서 파일을 열고 'w' 방식으로 엽니다.
class JsonWithEncodingPipeline(object):
    def __init__(self):
        self.file = codecs.open('article.json', 'w', encoding="utf-8")

둘째, pipeline을 아래의 방식처럼 처리합니다.
class ArticlespiderPipeline(object):
    def process_item(self, item, spider):

item은 dict가 아니지만 ㎡는 dict(item)로 dict로 전환할 수 있습니다.직접json.dumps(item)은 안 되기 때문에 dict()로 전환해야 합니다.
    def process_item(self, item, spider):
        lines = json.dumps(dict(item), ensure_ascii=False, )

여기서ensure_ascii=False False가 필요합니다. 그렇지 않으면 중국어를 가져오는 것이 정상적이지 않습니다.
파일을 쓰고 item을 되돌려줍니다.
    def process_item(self, item, spider):
        lines = json.dumps(dict(item), ensure_ascii=False) + "
" self.file.write(lines) return item

파충류를 닫을 때 파일을 닫습니다.
    def spider_closed(self, spider):
        self.file.close()

pipeline 구성
ITEM_PIPELINES = {
    'ArticleSpider.pipelines.ArticleImagePipeline': 1,
    'ArticleSpider.pipelines.JsonWithEncodingPipeline':2,
}

Scrapy 자체 쓰기 json
pipeline에서
from scrapy.exporters import JsonItemExporter

함수에 들어가면 맨 위에 여러 가지 형식의 내보내기 방식을 볼 수 있다.wb 이진법으로 엽니다.
class JsonExporterPipeline(object):
    #   Scrapy   JsonExporter  Json  。
    def __init__(self):
        self.file = open('article_exporter.json', 'wb')
        self.exporter = JsonItemExporter(self.file, encoding="utf-8", ensure_ascii=False)
        self.exporter.start_exporting()

    def close_spider(self, spider):
        self.exporter.finish_exporting()
        self.file.close()

    def process_item(self, item, spider):
        self.exporter.export_item(item)
        return item

json에 앞뒤에 괄호가 있는 것은 exporter 때문입니다.py에는 앞뒤에 괄호가 붙어 있습니다.
    def start_exporting(self):
        self.file.write(b"[
") def finish_exporting(self): self.file.write(b"
]")

좋은 웹페이지 즐겨찾기