0

私はしばらく悪い perl を書いてきましたが、代わりに悪い python を書くことを学ぼうとしています。数日前から抱えていた問題について読み返しました (その結果、Unicode について非常に多くのことを知っています) が、次のコードの不正な em-dash にまだ問題があります。

import urllib2

def scrape(url):
# simplified
    data = urllib2.urlopen(url)
    return data.read()

def query_graph_api(url_list):
# query Facebook's Graph API, store data.
    for url in url_list:
        graph_query = graph_query_root + "%22" + url + "%22"
        query_data = scrape(graph_query)
        print query_data #debug console

### START HERE ####

graph_query_root = "https://graph.facebook.com/fql?q=SELECT%20normalized_url,share_count,like_count,comment_count,total_count%20FROM%20link_stat%20WHERE%20url="

url_list = ['http://www.supersavvyme.co.uk',  'http://www.supersavvyme.co.uk/article/how-to-be-happy–laugh-more']

query_graph_api(url_list)

(これは、スクレーパーの非常に単純化された表現です。ところで、オリジナルはサイトを使用してsitemap.xmlURL のリストを作成し、Facebook の Graph API にクエリを実行してそれぞれの情報を取得します。元のスクレーパーは次のとおりです) 。

これをデバッグしようとする私の試みは、シェイクスピアを書き換えている無限のサルをエミュレートしようとすることでした。私の通常の方法 (エラー メッセージの StackOverflow を検索し、ソリューションをコピーして貼り付ける) は失敗しました。

質問: 2 番目の URL の em ダッシュなどの拡張文字がコードを壊さずに FQL クエリで機能するように、データをエンコードするにはどうすればよいですか?

PS私は正しい質問をしているのかどうかさえ疑問に思っていurllib.urlencodeますgraph_query_root.

---8<----

ScraperWiki の実際のスクレイパーから取得したトレースバックは次のとおりです。

http://www.supersavvyme.co.uk/article/how-to-be-happy–laugh-more
Line 80 - query_graph_api(urls)
Line 53 - query_data = scrape(graph_query) -- query_graph_api((urls=['http://www.supersavvyme.co.uk', 'http://...more
Line 21 - data = urllib2.urlopen(unicode(url)) -- scrape((url=u'https://graph.facebook.com/fql?q=SELECT%20url,...more
/usr/lib/python2.7/urllib2.py:126 -- urlopen((url=u'https://graph.facebook.com/fql?q=SELECT%20url,no...more
UnicodeEncodeError: 'ascii' codec can't encode character u'\u2013' in position 177: ordinal not in range(128)
4

1 に答える 1