Foros Python

Versión completa: urlopen devuelve contenido de otra dirección web
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
Hola

He realizado una pequeña aplicion con urlopen y el resultado es muy curioso. Pretendia copiar el fitxero html de la página princial de "https://www.wordreference.com/es/translation.asp" y cuando inspectiono el resultdo me ha debuelto el contenido de la página principal de "Yahoo.com"

¿A que es debido este comportamiento? ¿como puedo copiar el contenido real de "https://www.wordreference.com/es/translation.asp" ?

Codigo ejecutado:

Código:
from urllib.request import urlopen
 
WORD_URL = "https://www.wordreference.com/es/translation.asp"
file1 = open("MyFile.html","a")
for word in urlopen(WORD_URL).readlines():
    strIn = word.decode("utf-8")
    file1.write(strIn)
file1.close()
Hola, bienvenido.

Al parecer WordReference detecta que estás haciendo una petición con urllib y te redirecciona a Yahoo.com. Podés cambiar la cabecera de la petición para indentificarte como otro cliente (Firefox, por ejemplo) y así evitar la redirección:

Código:
from urllib.request import Request, urlopen

WORD_URL = "https://www.wordreference.com/es/translation.asp"
headers = {
    "User-Agent": ("Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:74.0) "
                   "Gecko/20100101 Firefox/74.0")
}
file1 = open("MyFile.html","ab")
for word in urlopen(Request(WORD_URL, headers=headers)).readlines():
    strIn = word
    file1.write(strIn)
file1.close()

Hice algunos cambios a tu código: si no vas a trabajar con la cadena, no es necesario que la decodifiques. Tampoco que leas línea por línea.

Como sea, tal vez te convenga usar directamente el módulo Requests, que es más sencillo y potente:

Código:
import requests

WORD_URL = "https://www.wordreference.com/es/translation.asp"
r = requests.get(WORD_URL)
with open("MyFile.html", "wb") as f:
    f.write(r.content)

Saludos
Muchisimas gracias Francisco !!!