いくつかの異なる辞書を使用して特定の単語を翻訳するためのスクリプト(純粋に学習目的)を作成しようとしています。urllib2とbeautifulsoupを使用して翻訳を取得して解析し、次にgoogletranslateに移りました。
403forbiddenエラーが返されることがすぐにわかりました。ユーザーエージェントを追加すると翻訳が取得されますが、1語の翻訳のみです。説明のために、http: //translate.google.com/?text = test&sl = en&tl = esにアクセスすると、翻訳(「hps」というタイトルのクラス)と動詞、名詞、形容詞のリストの両方が表示されます。ただし、以下のスクリプトを使用すると、htmlが異なり、メインの翻訳のみが返されます。
span id=result_box
動詞、名詞などは見つかりません。
その過程で、そしてかなりのグーグルで、私は今APIがあることに気づきました-そしてそれで無料のものではありません。最終的なスクリプトを投稿したり、TOSに違反するために使用したりするつもりはありませんが、ブラウザとurllibなどの違いについて興味をそそられています。
その趣旨で、私はユーザーエージェントで純粋なurllib2を試し、以下のように機械化しました。だから、私の質問は-ユーザーエージェント以外に、ブラウザとPythonスクリプトを区別するものは何ですか?私はfirebugを使ってみましたが、何も飛び出しませんでした(それは初心者ですが)。ありがとう!
編集:firebugからのリクエストヘッダーと私のスクリプトは以下のとおりです。
import mechanize
import re
import cookielib
# Browser
br = mechanize.Browser()
# Cookie Jar
cj = cookielib.LWPCookieJar()
br.set_cookiejar(cj)
# Browser options
br.set_handle_equiv(True)
br.set_handle_redirect(True)
br.set_handle_referer(True)
br.set_handle_robots(False)
# Follows refresh 0 but not hangs on refresh > 0
br.set_handle_refresh(mechanize._http.HTTPRefreshProcessor(), max_time=1)
# Want debugging messages?
br.set_debug_http(True)
br.set_debug_redirects(True)
br.set_debug_responses(True)
# User-Agent (this is cheating, ok?)
br.addheaders = [('User-agent', 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.1) Gecko/2008071615 Fedora/3.0.1-1.fc9 Firefox/3.0.1')]
# Open some site, let's pick a random one, the first that pops in mind:
r = br.open('http://translate.google.com/?text=test&sl=en&tl=es')
html = r.read()
match = re.findall(r'verb', html)
print match
Firebug:
GET /?text=test&sl=en&tl=es HTTP/1.1
Accept text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Charset ISO-8859-1,utf-8;q=0.7,*;q=0.7
Accept-Encoding gzip, deflate
Accept-Language en-us,en;q=0.5
Connection keep-alive
Cookie PREF=ID=298b435815ef8553:U=e7dad4baf65f083b:FF=0:LD=en:CR=2:TM=1327516863:LM=1339428154:S=maktYFZEHXXpMDFg; NID=60=U229h4lzOnjpHyidbhgYecCx72Myp_-XHgupW-R_mWtpuOveDdIOO1uLBq-6ltn-ER15ppJryR7yYOYEhkCfUCl45qNz5aymBQ1CGDHS4UcHu2oIDYAHut0ctnlL76eDW3n7kjOWoz5wNH6NMw
Host translate.google.com
User-Agent Mozilla/5.0 (Windows NT 6.1; WOW64; rv:9.0) Gecko/20100101 Firefox/9.0
脚本:
send:'GET /?text = test&sl = en&tl = es HTTP / 1.1 \ r \ nAccept-Encoding:identity \ r \ nHost:translate.google.com \ r \ nConnection:close \ r \ nUser-Agent:Mozilla / 5.0 (X11; U; Linux i686; en-US; rv:1.9.0.1)Gecko / 2008071615 Fedora / 3.0.1-1.fc9 Firefox / 3.0.1 \ r \ n \ r \ n'応答:' HTTP / 1.1 200 OK \ r \ n'ヘッダー:日付:2012年6月11日月曜日16:13:42 GMT
ヘッダー:有効期限:1990年1月1日金曜日00:00:00 GMT
ヘッダー:Cache-Control:キャッシュなし、再検証する必要があります
ヘッダー:プラグマ:キャッシュなし
ヘッダー:X-Frame-オプション:SAMEORIGIN
ヘッダー:Content-Type:text / html; charset = UTF-8
ヘッダー:コンテンツ-言語:en
ヘッダー:Set-Cookie:PREF = ID = 6dd42f2264250d7c:TM = 1333413222:LM = 1339454222:S = k6JXSoGGaAMNmPEo; 有効期限=水、2014年6月11日16:13:42 GMT; パス=/; domain = .google.com
ヘッダー:Set-Cookie:NID = 60 = f8czmR413h3sKUGJUUM4PLKl2O7SUtqfW5hss5O54sRKoErf9wIEU4Wu2WCuHzWTJQ3p1Rj7dQv1B4BBmSMY1tmfus7UZGCYFIKaXoKwklZ9 期限切れ=火曜日、2012年12月11日16:13:42 GMT; パス=/; domain = .google.com; HttpOnly
ヘッダー:P3P:CP = "これはP3Pポリシーではありません!詳細については、 http://www.google.com/support/accounts/bin/answer.py?hl = en&answer=151657をご覧 ください。"
ヘッダー:X-Content-Type-Options:nosniff
ヘッダー:サーバー:HTTPサーバー(不明)
ヘッダー:X-XSS-保護:1; mode = block
ヘッダー:接続:閉じる