0

urllib2 ライブラリを使用して Web サイトを読み込もうとしています。これが私のスクリプトです:

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 スクリプトによってアクセスされているという事実をサーバーが認識できるかどうか疑問に思っています。

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

4

2 に答える 2

2

URL リクエストのヘッダーにある User-Agent フィールドは、サイトへのアクセスに使用しているブラウザとシステムを Web サーバーに伝えるため、Python スクリプト リクエストであることを隠蔽または識別する最善の方法は、そのフィールドを変更することです。

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

デフォルトでは、このフィールドは使用時に空白のままですurllib2

したがって、エージェントを隠蔽したい場合は、単に宣言しないか、それが何か欺瞞的であると強制的に宣言することができます

request.add_header('User-Agent','None of your business.')
于 2012-04-23T17:44:36.003 に答える
1

もちろん検出可能ですが、通常は直接検出できません。たとえば、ユーザー エージェントの動作 (たとえば、1 時間ごとに同じファイルにアクセスする) を調べたり、iframe+img+javascript を読み込んで、実際に Web ブラウザーであるかどうかを確認したりできます。続行する前に完了する必要があるキャプチャが表示される可能性があり、外部スクリプトのアクセスを防ぐためのさまざまな手法が多数あります.

しかし、1 つのリクエストだけを見ると、それがスクリプトによるリクエストであるかどうかを検出するのは非常に困難です。実際、ブラウザを完全に模倣することは可能です。その背後にいるユーザーだけではありません。

しかし、より大きな問題は、あなたがやろうとしていることは適切かどうかです。一部の Web サイトでは、スクリプトによるアクセスを望まないのには理由があります。

于 2012-04-23T17:45:18.217 に答える