Come posso scaricare una pagina Web con un agente utente diverso da quello predefinito su urllib2.urlopen?Modifica di user agent su urllib2.urlopen
risposta
Setting the User-Agent dal preferito di tutti Dive Into Python.
Il racconto: è possibile utilizzare Request.add_header per farlo.
È inoltre possibile passare le intestazioni come un dizionario durante la creazione della richiesta stessa, as the docs note:
intestazioni dovrebbe essere un dizionario, e verranno trattati come se
add_header()
è stato chiamato con ogni chiave e valore come argomenti. Questo è spesso usato per "falsificare" l'intestazioneUser-Agent
, che viene utilizzata da un browser per identificarsi; alcuni server HTTP consentono solo le richieste provenienti da browser comuni anziché da script. Ad esempio, Mozilla Firefox potrebbe identificarsi come"Mozilla/5.0 (X11; U; Linux i686) Gecko/20071127 Firefox/2.0.0.11"
, mentre la stringa di agente utente predefinita diurllib2
è"Python-urllib/2.6"
(su Python 2.6).
I answered a similar question un paio di settimane fa.
C'è esempio di codice in questa domanda, ma in fondo si può fare qualcosa di simile: (. Si noti la capitalizzazione di User-Agent
come di RFC 2616, sezione 14,43)
opener = urllib2.build_opener()
opener.addheaders = [('User-Agent', 'Mozilla/5.0')]
response = opener.open('http://www.stackoverflow.com')
headers = { 'User-Agent' : 'Mozilla/5.0' }
req = urllib2.Request('www.example.com', None, headers)
html = urllib2.urlopen(req).read()
Oppure, un po 'più corto :
req = urllib2.Request('www.example.com', headers={ 'User-Agent': 'Mozilla/5.0' })
html = urllib2.urlopen(req).read()
Con i parametri denominati è possibile farlo in due righe. Rimuovi la prima riga e sostituisci la seconda con: 'req = urllib2.Request ('www.example.com', intestazioni = {'User-Agent': 'Mozilla/5.0'})'. Preferisco questo modulo per fare solo una richiesta. –
Tutto questo dovrebbe funzionare in teoria, ma (con Python 2.7.2 su Windows, almeno) ogni volta che si invia un header personalizzato User-agent, urllib2 non invia che hea der. Se non si tenta di inviare un'intestazione User-agent, invia il default Python/urllib2
Nessuno di questi metodi sembrano funzionare per l'aggiunta di User-agent, ma lavorano per altre intestazioni:
opener = urllib2.build_opener(proxy)
opener.addheaders = {'User-agent':'Custom user agent'}
urllib2.install_opener(opener)
request = urllib2.Request(url, headers={'User-agent':'Custom user agent'})
request.headers['User-agent'] = 'Custom user agent'
request.add_header('User-agent', 'Custom user agent')
@ la soluzione di jcoon ha funzionato per me su Python 2.7.2 (Linux) – bparker
'opener.addheaders' dovrebbe probabilmente essere' [('User-agent', 'Custom user agent')] '. Altrimenti tutti questi metodi dovrebbero funzionare (ho provato su Python 2.7.3 (Linux)). Nel tuo caso potrebbe rompersi perché usi l'argomento proxy sbagliato. – jfs
Per me la chiamata build_opener viene restituita con un User-Agent predefinito già definito nelle intestazioni. Quindi l'aggiunta creerà solo un'altra intestazione User-Agent, che come 2nd verrà ignorata. Ecco perché @ jcoon's sol sta funzionando. –
Per pitone 3, urllib è suddiviso in 3 moduli ...
import urllib.request
req = urllib.request.Request(url="http://localhost/",data=b'None',headers={'User-Agent':' Mozilla/5.0 (Windows NT 6.1; WOW64; rv:12.0) Gecko/20100101 Firefox/12.0'})
handler = urllib.request.urlopen(req)
Questo ha aiutato meravigliosamente. Non capisco perché ho bisogno di request.Request e quindi ripeto urllib.request.urlopen dove la vecchia versione dovrebbe fare solo urllib.urlopen (req) bene ma in ogni caso, questo funziona e so come usarlo in python 3 ora . – jamescampbell
Un'altra soluzione in urllib2
e Python 2.7:
req = urllib2.Request('http://www.example.com/')
req.add_unredirected_header('User-Agent', 'Custom User-Agent')
urllib2.urlopen(req)
Ricevo un errore 404 per una pagina che esiste se l'url inserito tramite il mio browser – Yebach
Per urllib
si può usare:
from urllib import FancyURLopener
class MyOpener(FancyURLopener, object):
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()
myopener.retrieve('https://www.google.com/search?q=test', 'useragent.html')
mi ha aiutato molto, grazie! – Meysam
Prova questa:
html_source_code = requests.get("http://www.example.com/",
headers={'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.107 Safari/537.36',
'Upgrade-Insecure-Requests': '1',
'x-runtime': '148ms'},
allow_redirects=True).content
La domanda tratta esplicitamente di 'urllib2' e non di altri moduli. –
ci sono due proprietà di urllib.URLopener()
e cioè:
addheaders = [('User-Agent', 'Python-urllib/1.17'), ('Accept', '*/*')]
e
version = 'Python-urllib/1.17'
.
Per ingannare il sito Web è necessario modificare entrambi questi valori in un utente-agente accettato. per es.
browser Chrome: 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.149 Safari/537.36'
Google bot: 'Googlebot/2.1'
come questo
import urllib
page_extractor=urllib.URLopener()
page_extractor.addheaders = [('User-Agent', 'Googlebot/2.1'), ('Accept', '*/*')]
page_extractor.version = 'Googlebot/2.1'
page_extractor.retrieve(<url>, <file_path>)
cambiare solo una proprietà non funziona perché il sito contrassegna come una richiesta di sospetto.
- 1. HTMLUnit: modifica stringa User Agent
- 2. pitone urllib2 urlopen risposta
- 3. La cache della urllib2.urlopen()?
- 4. Quali errori/eccezioni devo gestire con urllib2.Request/urlopen?
- 5. Java User Agent
- 6. WebView - Definire User-Agent su ogni richiesta
- 7. Qt QWebView class User User Agent
- 8. Mocking urllib2.urlopen(). Read() per risposte diverse
- 9. Come riconoscere Facebook User-Agent
- 10. Esiste un database di user-agent online?
- 11. user agent iOS 8 Simulator
- 12. Impostazione User-Agent in AFNetworking
- 13. Chrome ottenere "stylesheet user agent"
- 14. Analisi HTTP User-Agent stringa
- 15. capybara poltergeist - override user agent
- 16. Urlretrieve e User-Agent? - Python
- 17. UrlFetch con stringa user-agent personalizzata?
- 18. Cambia PhoneGap/Cordova User-Agent per AJAX
- 19. Cambiare User Agent in Python 3 per urrlib.request.urlopen
- 20. React Native e okhttp su Android - Set User-Agent
- 21. chiusura dei file correttamente aperti con urllib2.urlopen()
- 22. Qual è lo user-agent Samsung s3?
- 23. Come ottenere user agent in PHP
- 24. Imposta User-Agent quando si utilizza XmlTextReader
- 25. User-Agent in richieste HTTP, Ruby
- 26. Come impostare User-Agent con LWP?
- 27. urllib2.urlopen() di Python con connessione locale a un server Java Restlet
- 28. python: urllib2 come inviare cookie con richiesta urlopen
- 29. urllib2.urlopen() vs urllib.urlopen() - urllib2 genera 404 mentre urllib funziona! PERCHÉ?
- 30. Spring MVC: Risolvere la vista sulla base di User-Agent
Questo metodo funziona per altre intestazioni, ma non per User-Agent - almeno non nella mia installazione 2.6.2. User-Agent viene ignorato per qualche motivo. – Nathan
Credo che "User-agent" dovrebbe in effetti essere "User-Agent" (L'A è in maiuscolo) Sembra funzionare per me quando viene fatto. – KriiV
I nomi delle intestazioni non fanno distinzione tra maiuscole e minuscole. –