libreria httperror example build_opener python urllib2 user-agent

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 encabezado User-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 de urllib2 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()