1

ウィキペディアの記事を取得して編集するプログラムを書いていますが、\u で始まる Unicode 文字の処理に少し問題があります。.encode("utf8") を試しましたが、ここではうまくいかないようです。\u で始まるこれらの値を POST ウィキペディアに適切にエンコードするにはどうすればよいですか? 私の問題については、この編集を参照してください。ここにいくつかのコードがあります: ページを取得するには:

url = "http://en.wikipedia.org/w/api.php?action=query&format=json&titles="+urllib.quote(name)+"&prop=revisions&rvprop=content"
articleContent = ClientCookie.urlopen(url).read().split('"*":"')[1].split('"}')[0].replace("\\n", "\n").decode("utf-8")

ページを投稿する前に:

data = dict([(key, value.encode('utf8')) for key, value in data.iteritems()])
data["text"] = data["text"].replace("\\", "")
editInfo = urllib2.Request("http://en.wikipedia.org/w/api.php", urllib.urlencode(data))
4

1 に答える 1

2

JSON データをデコードせずにダウンロードしています。jsonそのためにライブラリを使用します。

import json

articleContent = ClientCookie.urlopen(url)
data = json.load(articleContent)

JSON でエンコードされたデータは Python によく似ており、\uエスケープも使用しますが、実際には JavaScript のサブセットです。

変数はdata、深いデータ構造を保持するようになりました。弦の分割から判断すると、あなたはこの作品が欲しかった:

articleContent = data['query']['pages'].values()[0]['revisions'][0]['*']

articleContentは実際のunicode()インスタンスです。これは、探していたページのリビジョン テキストです。

>>> print u'\n'.join(data['query']['pages'].values()[0]['revisions'][0]['*'].splitlines()[:20])
{{For|the game|100 Bullets (video game)}}
{{GOCEeffort}}
{{italic title}}
{{Supercbbox  <!--Wikipedia:WikiProject Comics-->
| title =100 Bullets
| image =100Bullets vol1.jpg
| caption = Cover to ''100 Bullets'' vol. 1 "First Shot, Last Call". Cover art by Dave Johnson.
| schedule = Monthly
| format =
|complete=y
|Crime       = y
| publisher = [[Vertigo (DC Comics)|Vertigo]]
| date = August [[1999 in comics|1999]] – April [[2009 in comics|2009]]
| issues = 100
| main_char_team = [[Agent Graves]] <br/> [[Mr. Shepherd]] <br/> The Minutemen <br/> [[List of characters in 100 Bullets#Dizzy Cordova (also known as "The Girl")|Dizzy Cordova]] <br/> [[List of characters in 100 Bullets#Loop Hughes (also known as "The Boy")|Loop Hughes]]
| writers = [[Brian Azzarello]]
| artists = [[Eduardo Risso]]<br>Dave Johnson
| pencillers =
| inkers =
| colorists = Grant Goleash<br>[[Patricia Mulvihill]]
于 2013-01-13T21:57:26.333 に答える