example - urllib2 httperror python
Cambio de agente de usuario en urllib2.urlopen (9)
¿Cómo puedo descargar una página web con un agente de usuario que no sea el predeterminado en urllib2.urlopen?
Otra solución en urllib2
y Python 2.7:
req = urllib2.Request(''http://www.example.com/'')
req.add_unredirected_header(''User-Agent'', ''Custom User-Agent'')
urllib2.urlopen(req)
Para urllib
puedes usar:
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'')
Para python 3, urllib se divide en 3 módulos ...
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)
Prueba esto :
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
Todo esto debería funcionar en teoría, pero (con Python 2.7.2 en Windows como mínimo) cada vez que envíe un encabezado personalizado de agente de usuario, urllib2 no envía ese encabezado. Si no intenta enviar un encabezado User-agent, envía el Python / urllib2 predeterminado
Ninguno de estos métodos parece funcionar para agregar User-agent, pero funcionan para otros encabezados:
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'')
hay dos propiedades de urllib.URLopener()
saber:
addheaders = [(''User-Agent'', ''Python-urllib/1.17''), (''Accept'', ''*/*'')]
y
version = ''Python-urllib/1.17''
.
Para engañar al sitio web, necesita cambiar estos dos valores a un User-Agent aceptado. por ejemplo
Navegador 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''
Me gusta esto
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>)
cambiar solo una propiedad no funciona porque el sitio web lo marca como una solicitud sospechosa.
Configuración del User-Agent del favorito de todos Dive Into Python .
La historia corta: puede usar Request.add_header para hacer esto.
También puede pasar los encabezados como un diccionario al crear la Solicitud en sí, como la nota de documentos :
los encabezados deben ser un diccionario, y se tratarán como si se
add_header()
con cada clave y valor como argumentos. A menudo se usa para "falsificar" el encabezadoUser-Agent
, que es utilizado por un navegador para identificarse: algunos servidores HTTP solo permiten solicitudes provenientes de navegadores comunes en lugar de scripts. Por ejemplo, Mozilla Firefox puede identificarse como"Mozilla/5.0 (X11; U; Linux i686) Gecko/20071127 Firefox/2.0.0.11"
, mientras que la cadena de agente de usuario por defecto deurllib2
es"Python-urllib/2.6"
(en Python) 2.6).
answered una pregunta similar hace un par de semanas.
Hay código de ejemplo en esa pregunta, pero básicamente puede hacer algo como esto: (Observe las mayúsculas del User-Agent
partir del RFC 2616 , sección 14.43).
opener = urllib2.build_opener()
opener.addheaders = [(''User-Agent'', ''Mozilla/5.0'')]
response = opener.open(''http://www..com'')
headers = { ''User-Agent'' : ''Mozilla/5.0'' }
req = urllib2.Request(''www.example.com'', None, headers)
html = urllib2.urlopen(req).read()
O, un poco más corto:
req = urllib2.Request(''www.example.com'', headers={ ''User-Agent'': ''Mozilla/5.0'' })
html = urllib2.urlopen(req).read()