ユーザー エージェント文字列を変更するプログラムを書きたいと思います。
Pythonでこれを行うにはどうすればよいですか?
HTTP リクエストのユーザー エージェント文字列を意味していると思いますか? これは、リクエストとともに送信される単なる HTTP ヘッダーです。
Python の urllib2 を使用:
import urllib2
url = 'http://foo.com/'
# add a header to define a custon User-Agent
headers = { 'User-Agent' : 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)' }
req = urllib2.Request(url, '', headers)
response = urllib2.urlopen(req).read()
ではurllib
、次のように実行されます。
import urllib
class AppURLopener(urllib.FancyURLopener):
version = "MyStrangeUserAgent"
urllib._urlopener = AppURLopener()
あとはurllib.urlopen
普通に使えます。では、のパラメータとともにurllib2
使用して、必要なすべてのヘッダー (ユーザー エージェントを含む) を作成する新しい要求オブジェクトに設定します。req = urllib2.Request(...)
headers=somedict
req
urllib2.urlopen(req)
もちろん、HTTP リクエストを送信する他の方法には、ヘッダーを指定する他の方法があります。
Python を使用すると、 urllibを使用して Web ページをダウンロードし、バージョン値を使用してユーザー エージェントを変更できます。
http://wolfprojects.altervista.org/changeua.phpに非常に良い例があります
そのページからコピーした例を次に示します。
>>> from urllib import FancyURLopener
>>> class MyOpener(FancyURLopener):
... version = 'Mozilla/5.0 (Windows; U; Windows NT 5.1; it; rv:1.8.1.11)
Gecko/20071127 Firefox/2.0.0.11'
>>> myopener = MyOpener()
>>> page = myopener.open('http://www.google.com/search?q=python')
>>> page.read()
[…]Results <b>1</b> - <b>10</b> of about <b>81,800,000</b> for <b>python</b>[…]
urllib2
組み込みなのでいいのですが、選択肢があるときは機械化を使用する傾向があります。の多くの機能を拡張しurllib2
ます (ただし、その多くは近年 python に追加されています)。とにかく、それがあなたが使用している場合、ユーザーエージェント文字列を変更する方法に関するドキュメントの例を次に示します。
import mechanize
cookies = mechanize.CookieJar()
opener = mechanize.build_opener(mechanize.HTTPCookieProcessor(cookies))
opener.addheaders = [("User-agent", "Mozilla/5.0 (compatible; MyProgram/0.1)"),
("From", "responsible.person@example.com")]
幸運を祈ります。
Python 3.2 (py3k) 用に更新:
import urllib.request
headers = { 'User-Agent' : 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)' }
url = 'http://www.google.com'
request = urllib.request.Request(url, b'', headers)
response = urllib.request.urlopen(request).read()
Web ページを開くときに送信するユーザー エージェント文字列を変更したい場合は、Google で Firefox プラグインを探してください。;) たとえば、これを見つけました。または、Python でプロキシ サーバーを記述して、ブラウザーとは無関係にすべての要求を変更することもできます。
私のポイントは、弦の交換は簡単な部分になるということです。あなたの最初の質問は、どこを変更する必要がありますか? すでにそれを知っている場合 (ブラウザーで? プロキシ サーバーで? あなたと Web サーバーの間のルーターで?)、私たちはおそらくもっと役立つでしょう。または、スクリプト内でこれを行っているだけの場合は、いずれかのurllib
回答を使用してください。;)