Python Scrapyのjsonトランスコード中国語処理2:items方式
3329 ワード
Summary
itemsおよびjsonトランスコードを使用して中国語の結果を得る方法について説明します.サイトの数字のしっぽで説明します.
settings.py
最初の3つのシステムのデフォルトは、robotを1つ削除し、ITEMを追加します.PIPELINES一条.
items.py
titleを1つだけ登ります.
spider
pipelines.py後処理
2つのJson処理キー: を開きます.
システムのデフォルトの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は使用しなくてもいいです.
最終結果正常Dgtle_4.js
timestamp: 2016-12-16 11:18 PM
テスト環境
scrapy 1.2.2 python 2.7.12 os x 10.10.3
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