Web raspado urlopen en python

Estoy intentando obtener los datos de este sitio web: http://www.boursotwig.com/includes/cours/last_transactions.phtml?symbole=1xEURUS

Parece que urlopen no recibe el código html y no entiendo por qué. Va como:

html = urllib.request.urlopen("http://www.boursotwig.com/includes/cours/last_transactions.phtml?symbole=1xEURUS") print (html) 

Mi código es correcto, obtengo la fuente html de otras páginas web con el mismo código, pero parece que no reconoce esta dirección.

se imprime: b ”

Tal vez otra biblioteca es más apropiada? ¿Por qué urlopen no devuelve el código html de la página web? ayuda gracias

Personalmente, escribo:

 # Python 2.7 import urllib url = 'http://www.boursotwig.com/includes/cours/last_transactions.phtml?symbole=1xEURUS' sock = urllib.urlopen(url) content = sock.read() sock.close() print content 

Et si tu parles français, .. bonjour sur stackoverflow.com!

actualización 1

De hecho, ahora prefiero emplear el siguiente código, porque es más rápido:

 # Python 2.7 import httplib conn = httplib.HTTPConnection(host='www.boursotwig.com',timeout=30) req = '/includes/cours/last_transactions.phtml?symbole=1xEURUS' try: conn.request('GET',req) except: print 'echec de connexion' content = conn.getresponse().read() print content 

Cambiar httplib a http.client en este código debería ser suficiente para adaptarlo a Python 3.

.

Confirmo que, con estos dos códigos, obtengo el código fuente en el que veo los datos en los que está interesado:

  11:57:44 1.4486 0   11:57:43 1.4486 0  

actualización 2

Agregar el siguiente fragmento de código al código anterior le permitirá extraer los datos que supongo que desea:

 for i,line in enumerate(content.splitlines(True)): print str(i)+' '+repr(line) print '\n\n' import re regx = re.compile('\t\t\t\t\t\t(\d\d:\d\d:\d\d)\r\n' '\t\t\t\t\t\t([\d.]+)\r\n' '\t\t\t\t\t\t(\d+)\r\n') print regx.findall(content) 

resultado (solo el final)

 ....................................... ....................................... ....................................... ....................................... 98 'window.config.graphics = {};\n' 99 'window.config.accordions = {};\n' 100 '\n' 101 "window.addEvent('domready', function(){\n" 102 '});\n' 103 '\n' 104 '
\n' 114 '\n' 128 '\n' 129 '' [('12:25:36', '1.4478', '0'), ('12:25:33', '1.4478', '0'), ('12:25:31', '1.4478', '0'), ('12:25:30', '1.4478', '0'), ('12:25:30', '1.4478', '0'), ('12:25:29', '1.4478', '0')]

Espero que no planee “jugar” en el Forex: es una de las mejores maneras de perder dinero rápidamente.

actualización 3

LO SIENTO ! Olvidé que estás con Python 3. Así que creo que debes definir la expresión regular así:

regx = re.compile ( b ‘\ t \ t \ t \ t \ t ……)

es decir, con b antes de la cadena, de lo contrario obtendrá un error como en esta pregunta

Lo que sospecho que está sucediendo es que el servidor está enviando datos comprimidos sin decirle que lo está haciendo. La biblioteca HTTP estándar de Python no puede manejar formatos comprimidos.
Sugiero obtener httplib2, que puede manejar formatos comprimidos (y generalmente es mucho mejor que urllib).

 import httplib2 folder = httplib2.Http('.cache') response, content = folder.request("http://www.boursotwig.com/includes/cours/last_transactions.phtml?symbole=1xEURUS") 

print(response) nos muestra la respuesta del servidor:
{‘status’: ‘200’, ‘content-length’: ‘7787’, ‘x-sid’: ’26, E ‘,’ content-language ‘:’ fr ‘,’ set-cookie ‘:’ PHPSESSIONID = ed45f761542752317963ab4762ec604f; ruta = /; domain = .www.boursotwig.com ‘,’ expira ‘:’ Thu, 19 Nov 1981 08:52:00 GMT ‘,’ vary ‘:’ Accept-Encoding, User-Agent ‘,’ server ‘:’ nginx ‘, ‘conexión’: ‘keep-alive’, ‘-content-encoding’: ‘gzip’ , ‘pragma’: ‘no-cache’, ‘cache-control’: ‘no-store, no-cache, must-revalidate, post-check = 0, pre-check = 0 ‘,’ date ‘:’ Tue, 23 Aug 2011 10:26:46 GMT ‘,’ content-type ‘:’ text / html; charset = ISO-8859-1 ‘,’ content-location ‘:’ http://www.boursotwig.com/includes/cours/last_transactions.phtml?symbole=1xEURUS ‘}

Si bien esto no confirma que estaba comprimido (después de todo, le estamos diciendo al servidor que podemos manejar las compresiones), le da cierto peso a la teoría.

El contenido real vive en, lo has adivinado, content . Verlo brevemente nos muestra que está funcionando (solo voy a pegar un poquito):
b'

Edición : sí, esto crea una carpeta llamada .cache; Descubrí que siempre es mejor trabajar con carpetas cuando se trata de httplib2, y luego siempre se puede eliminar la carpeta.

He probado su URL con el httplib2 y en el terminal con curl. Ambos funcionan bien:

 URL = "http://www.boursotwig.com/includes/cours/last_transactions.phtml?symbole=1xEURUS" h = httplib2.Http() resp, content = h.request(URL, "GET") print(content) 

Entonces, para mí, o hay un error en urllib.request o hay una interacción cliente-servidor realmente extraña.