2012-04-23 22 views
0

私はurllib2ライブラリを使用してウェブサイトを読もうとしています。 はここに私のスクリプトです:私は、サーバーがこれらの要求を受信して​​、どのように疑問に思ってサーバはPythonスクリプトでアクセスしていることを知ることができますか?もしそうなら、それを隠す方法は?

import urllib2 

# Get a file-like object for the Python Web site's home page. 

def wikitranslate(word): 
    translation = '' 
    pageURL = '' 
    opener = urllib2.build_opener() 
    f = opener.open("http://fr.wikipedia.org/w/api.php?action=opensearch&search=" + re.sub(' ', '%20', word.rstrip())) 
    # Read from the object, storing the page's contents in 's'. 
    s = f.read() 

それはPythonスクリプトではなく、ブラウザからアクセスされているという事実を認識することができます。

もしそうなら、それを隠す方法はありますか?

+1

Pythonスクリプトから特定のブラウザをエミュレートしようとしている場合は、[Fiddler](http://www.fiddler2.com/fiddler2/)を使用して、ブラウザから何が送信されているかを確認し、あなたのpythonスクリプトから同じ情報。 –

+0

@sethflowers:フィドラーで私を指差して+1します。 KewlTool®のようです。 –

答えて

2

urlリクエストのヘッダーにあるUser-Agentフィールドは、Webサーバーにそのサイトにアクセスするために使用しているブラウザとシステムを記述します。したがって、pythonスクリプトリクエストとして自分自身を隠すか、そのフィールド。あなたのエージェントを隠すためにしたいのであれば、単にそれを宣言していない、またはあなたが強制的にそれが偽りのものであることを宣言することができurllib2

を使用している場合、このフィールドは空白のままになっているデフォルトで

request = urllib2.Request(url,None) 
request.add_header('User-Agent','Python Script') # Or 'Not a python script' 

request.add_header('User-Agent','None of your business.') 
+0

彼はそれを隠そうと思っていると思う。 –

+0

私が言及したように、デフォルトでは空白のままになっています。隠すために、このフィールドを宣言しないでください。 – lukecampbell

+0

しかし、ユーザエージェントを送信しない "ブラウザ"は自動的に疑わしいものです。 –

1

もちろん、それは検出可能ですが、通常は直接的ではありません。たとえば、ユーザーエージェントの動作(1時間ごとに同じファイルにアクセスする)を見たり、iframe + img + javascriptを読み込んで実際にウェブブラウザであるかどうかを調べたりできます。それはあなたが続行する前に完了しなければならないcaptchaを提示することができ、外部スクリプトがアクセスするのを防ぐためのさまざまなテクニックがあります。

しかし、1つのリクエストを見ると、そのリクエストを行うスクリプトであることを検出するのがずっと難しくなります。実際、ブラウザを完全に模倣することは可能です。その背後にいるユーザーではありません。

しかし、より大きな質問は、あなたがしようとしていることが適切かどうかです。スクリプトによっては、ウェブサイトにアクセスしたくないウェブサイトがある理由があります。

+0

ここでの目標は、wikipediaの「言語」タブに基づいてキーワードを翻訳するスクリプトを作成することです。 – Asimov4

関連する問題