Python Scrapyのjsonトランスコード中国語処理2:items方式

3329 ワード

Summary
itemsおよびjsonトランスコードを使用して中国語の結果を得る方法について説明します.サイトの数字のしっぽで説明します.
settings.py
最初の3つのシステムのデフォルトは、robotを1つ削除し、ITEMを追加します.PIPELINES一条.
BOT_NAME = 'dgtle'

SPIDER_MODULES = ['dgtle.spiders']
NEWSPIDER_MODULE = 'dgtle.spiders'

ITEM_PIPELINES = {
    'dgtle.pipelines.JsonWriterPipeline':300,
}

items.py
titleを1つだけ登ります.
import scrapy

class DgtleItem(scrapy.Item):
    title = scrapy.Field()

spider yield itemが必要です.
import scrapy
from dgtle.items import DgtleItem


class DgtleSpider(scrapy.Spider):
    name = "dgtle4"
    start_urls = [
        "http://www.dgtle.com",
    ]


    def parse(self,response):
        
        for article in response.css('div.cr180article_list dl'):
            item = DgtleItem()
            item['title'] = article.css('dt a::text').extract_first()
            yield item

pipelines.py後処理
2つのJson処理キー:
  • codecs.open('filename', 'wb', encoding='utf-8')を使用して、ファイル
  • を開きます.
  • line = json.dumps(dict(item), ensure_ascii=False) + "
    "
    を使用してasciiコードを閉じます.

  • システムのデフォルトのDgtlePipelineは動いていません.Scrapy 1.2.2の文書章3.7.2の「Write items to JSON file」に従ってJsonWriterPipelineを追加します.でもclose_spiderはprocessに置いたitemの後ろ.
    ファイル名をDgtle_に変更4.js、他の名前を使ってもいいし、そうでもいいです.jlのファイル.開く方法はcodecsを使用した.Open、パラメータencoding='utf-8'付き.
    itemを処理する場合、json.dumps増加パラメータensure_ascii=False、asciiコードの格納をオフにします.そしてsort_keysは使用しなくてもいいです.
    import json
    import codecs
    
    
    class DgtlePipeline(object):
        def process_item(self, item, spider):
            return item
    
    class JsonWriterPipeline(object):
    
        def open_spider(self,spider):
            self.file = codecs.open('Dgtle_4.js', 'wb', encoding='utf-8')
    
        def process_item(self, item, spider):
            line = json.dumps(dict(item), ensure_ascii=False, sort_keys=False) + "
    " self.file.write(line) return item def close_spider(self, spider): self.file.close()

    最終結果正常Dgtle_4.js
    timestamp: 2016-12-16 11:18 PM
    {"title": "       ?            Magic"}
    {"title": "            『  』"}
    {"title": "                     "}
    {"title": "   Gear S3   :    ,    "}
    {"title": "    |   ,   Magic      "}
    {"title": "Super Mario Run    App Store:           "}
    {"title": "『    』    :      "}
    {"title": "   A99M2   ,         "}
    {"title": "         ,         "}
    {"title": "      「   」  ,        Nokia N9"}
    {"title": "     67II      "}
    {"title": "      ,      S1     "}
    {"title": "      |                 ?"}
    {"title": "       ,    ?"}
    {"title": "            ,AKG Y50      "}
    {"title": "                "}
    {"title": "              "}
    {"title": "   3D    ,   7 MAX     "}
    {"title": "『    』    ,    "}
    {"title": "   Mavic Pro          "}
    

    テスト環境
    scrapy 1.2.2 python 2.7.12 os x 10.10.3