1

このウェブサイトのグラフに含まれるデータを取得しようとしています。Firebugを使用してjsonへの直接リンクを見つけ、このスクリプトを使用しました(他の直接jsonリンクで機能します)。返されるのは、タイムスタンプと価格のセットです。

    import urllib2
    import simplejson
    req = urllib2.Request("http://www.grandexchangecentral.com/include/gecgraphjson.php?jsid=10350")
    opener = urllib2.build_opener()
    f = opener.open(req)
    h = simplejson.load(f)

このスクリプトを実行すると、が返されますurllib2.HTTPError: HTTP Error 403: Forbidden。Firebugを使用してデータを手動で取得できますが、スクリプトを使用して複数のデータセットを並べ替えたいと思います。HTTPエラーを受け取らずにこのデータを取得する方法はありますか?

4

3 に答える 3

2

このWebサイトはRefererヘッダーを探し、要求がそのWebページの1つから発信されたことを確認しようとします。これは優れたセキュリティ対策ではないため、バイパスするのは非常に簡単です。

私は今少し怠惰で、のドキュメントを調べたくないので、モジュールurllib2を使用した解決策は次のとおりです。requests

import requests

url = 'http://www.grandexchangecentral.com/include/gecgraphjson.php?jsid=10350'
r = requests.get(url, headers={'Referer': 'www.grandexchangecentral.com'})

data = r.json
于 2012-10-30T03:47:28.430 に答える
1

これはstdlibのみのバージョンで、@Blenderが提案したようにヘッダーを追加するだけです。

import json
import urllib2

url = "http://www.grandexchangecentral.com/include/gecgraphjson.php?jsid=10350"
req = urllib2.Request(url, headers={'Referer': 'www.grandexchangecentral.com'})
page = urllib2.urlopen(req) # assume no multithreading
data = json.load(page) # assume utf-8 encoding
于 2012-10-30T04:27:07.323 に答える
0

あなたができるようには見えません。そのリンクにアクセスしようとすると、これは私が得るエラーです。

変更は許可されていません。このページに直接アクセスしようとしている可能性があります。または、正しいリファラー情報を送信しないブラウザーを使用している可能性があります。メンバーアカウントの編集を検証するには、この情報が必要です。適切な会員編集ページを使用するか、別のブラウザを使用してください。

スクリプトを取得してサイトに偽のログインを行うか、ヘッダーを操作する必要があります。または、サイトの所有者にデータを取得するためのアクセス権を取得できるかどうかを尋ねることもできます。

于 2012-10-30T03:26:40.953 に答える