2009-06-12 28 views

Antwort

2

Mit Python können Sie urllib verwenden, um Webseiten herunterzuladen und den Versionswert zu verwenden, um den Benutzeragenten zu ändern.

Es ist ein sehr gutes Beispiel für http://wolfprojects.altervista.org/changeua.php

Hier ist ein Beispiel von dieser Seite kopiert wird:

>>> 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>[…] 
8

Ich gehe davon aus Sie einen Benutzer-Agenten-String in einer HTTP-Anforderung bedeuten? Dies ist nur ein HTTP-Header, der mit Ihrer Anfrage gesendet wird.

mit 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() 
3

In urllib, es so gemacht wird:

import urllib 

class AppURLopener(urllib.FancyURLopener): 
    version = "MyStrangeUserAgent" 

urllib._urlopener = AppURLopener() 

und dann urllib.urlopen nur normal verwenden. Verwenden Sie in urllib2req = urllib2.Request(...) mit einem Parameter von headers=somedict, um alle gewünschten Header (einschließlich Benutzeragenten) im neuen Anforderungsobjekt req, das Sie erstellen, und urllib2.urlopen(req) festzulegen.

Andere Möglichkeiten, HTTP-Anfragen zu senden, haben natürlich andere Möglichkeiten, Header zu spezifizieren.

0

Wenn Sie die User-Agent-Zeichenfolge, die Sie beim Öffnen von Webseiten senden, ändern möchten, googeln Sie nach einem Firefox-Plugin. ;) Zum Beispiel habe ich this one gefunden. Oder Sie könnten einen Proxy-Server in Python schreiben, der alle Ihre Anfragen unabhängig vom Browser ändert.

Mein Punkt ist, die Änderung der Zeichenfolge wird der einfache Teil sein; Ihre erste Frage sollte sein, wo muss ich es ändern? Wenn Sie bereits wissen, dass (auf dem Browser? Proxy-Server? Auf dem Router zwischen Ihnen und den Webservern, die Sie treffen?), Können wir wahrscheinlich hilfreicher sein. Oder, wenn Sie dies nur in einem Skript tun, gehen Sie mit einer der urllib Antworten. ;)

2

urllib2 ist nett, weil es eingebaut ist, aber ich neige dazu, mechanize zu verwenden, wenn ich die Wahl habe. Es erweitert viele Funktionen urllib2 (obwohl viel Python in den letzten Jahren hinzugefügt wurde). Wie auch immer, wenn es ist, was Sie verwenden, hier ist ein Beispiel von ihrem docs, wie Sie den User-Agent-String ändern würden:

import mechanize 
cookies = mechanize.CookieJar() 
opener = mechanize.build_opener(mechanize.HTTPCookieProcessor(cookies)) 
opener.addheaders = [("User-agent", "Mozilla/5.0 (compatible; MyProgram/0.1)"), 
        ("From", "[email protected]")] 

Best of luck.

0

für Python Aktualisiert 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() 
1

Wie oben in den Antworten erwähnt, kann der User-Agent-Feld in der http-Request-Header geändert builtin Module in Python wie urllib2 verwendet werden. Gleichzeitig ist es wichtig zu analysieren, was genau der Webserver sieht. Ein kürzlich veröffentlichter Artikel auf User agent detection gibt einen Beispielcode und eine Ausgabe, die eine Beschreibung dessen geben, was der Webserver sieht, wenn eine programmatische Anforderung gesendet wird.

Verwandte Themen