¿Cómo puedo descargar una página web con un agente de usuario que no sea el predeterminado en urllib2.urlopen?
¿Cómo puedo descargar una página web con un agente de usuario que no sea el predeterminado en urllib2.urlopen?
Configuración del User-Agent desde el Dive Into Python favorito de todos .
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 se indica en los documentos :
los encabezados deben ser un diccionario y se tratarán como si
add_header()
se llamaran con cada clave y valor como argumentos. Esto se usa a menudo para "falsificar" elUser-Agent
encabezado, que es utilizado por un navegador para identificarse a sí mismo; 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 queurllib2
la cadena de agente de usuario predeterminada es"Python-urllib/2.6"
(en Python 2.6).
Yo respondí una pregunta similar hace un par de semanas.
Hay un código de ejemplo en esa pregunta, pero básicamente puede hacer algo como esto: (Tenga en cuenta las mayúsculas de a User-Agent
partir de RFC 2616 , sección 14.43).
opener = urllib2.build_opener()
opener.addheaders = [('User-Agent', 'Mozilla/5.0')]
response = opener.open('http://www.stackoverflow.com')
User-agent
que de hecho debería serUser-Agent
(La A está en mayúscula) Parece funcionar para mí cuando lo hago .O, un poco más corto:
fuente
req = urllib2.Request('www.example.com', headers={'User-Agent': 'Mozilla/5.0'})
. Prefiero este formulario para hacer una sola solicitud.html = urlopen(Request('http://www.example.com', headers={'User-Agent': 'Mozilla/5.0'})).read()
Para python 3, urllib se divide en 3 módulos ...
fuente
data=b'None'
parámetro confuso de la respuesta. Transformó la solicitud de ejemplo a POST con datos no válidos. Probablemente la razón del error en su caso, @MaksimTodo esto debería funcionar en teoría, pero (con Python 2.7.2 en Windows al menos) cada vez que envía un encabezado de agente de usuario personalizado, urllib2 no envía ese encabezado. Si no intenta enviar un encabezado de agente de usuario, envía el Python / urllib2 predeterminado
Ninguno de estos métodos parece funcionar para agregar User-agent, pero funcionan para otros encabezados:
fuente
opener.addheaders
probablemente debería ser[('User-agent', 'Custom user agent')]
. De lo contrario, todos estos métodos deberían funcionar (he probado en Python 2.7.3 (Linux)). En su caso, podría romperse porque utiliza incorrectamente el argumento de proxy.Porque
urllib
puedes usar:fuente
Otra solución en
urllib2
Python 2.7:fuente
Prueba esto :
fuente
urllib2
y no otros módulos.hay dos propiedades de a
urllib.URLopener()
saber:addheaders = [('User-Agent', 'Python-urllib/1.17'), ('Accept', '*/*')]
yversion = 'Python-urllib/1.17'
.Para engañar al sitio web, debe cambiar ambos 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'
así
cambiar solo una propiedad no funciona porque el sitio web la marca como una solicitud sospechosa.
fuente