1
_ntes_stocksearch_callback([{"type":"SZ","symbol":"000001","name":"a","spell":"PAYH"},{"type":"SH","symbol":"000001","name":"b","spell":"SZZS"},{"type":"FN","symbol":"000001","name":"c","spell":"HXCZHH"}])

次のような結果を得るための正規表現パターンの書き方:

{"type":"SZ","symbol":"000001","name":"a","spell":"PAYH"},
{"type":"SH","symbol":"000001","name":"b","spell":"SZZS"},
{"type":"FN","symbol":"000001","name":"c","spell":"HXCZHH"}

アップデート:

URL から何かをスクラップして、出力を関数 json.loads() で処理できるようにしたいのですが、どうすればよいですか?

import urllib2
convert_url = "http://quotes.money.163.com/stocksearch/json.do?type=&count=10&word=000001"
req = urllib2.Request(convert_url)
html = urllib2.urlopen(req).read()
html = html.decode("gbk").encode("utf-8")
print html
4

1 に答える 1

4

わかりました。API はJSONP応答を返しています。

したがって、最初にフォーマットを通常の json に「アンラップ」または「変換」する必要があります。URLのパラメーターを使用してcallback、JSONP 関数を固定名に設定します。

# Setthe callback name to "n"
convert_url = "http://quotes.money.163.com/stocksearch/json.do?type=&count=10&word=000001&callback=n"

次に、JSONP を削除して、簡単に解析できる JSON を残すことができます。

import json

def loads_jsonp(jsonp, callback_name):
    jsonp = jsonp.strip()
    if jsonp.startswith(callback_name + '(') and jsonp.endswith(')'):
        # remove the leading "callback(" and trailing ")", then parse the json
        return json.loads(jsonp[len(callback_name) + 1:-1])
    raise ValueError.new("Callback names do not match, or invalid JSONP format")

次に、それをデータに適用できます。

# `jsonp_data` variable contains the body of the response
my_data = loads_jsonp(jsonp_data, "n")

別の方法として、API が通常の JSON 応答を返すことができるかどうかを確認できます。その場合、これらのスキップをすべてスキップしてjson.loads直接使用することができます。

于 2013-11-14T07:09:51.683 に答える