Código de Python - Clase para leer el contenido de una pagina web utilizando httplib

Imágen de perfil
Val: 666
Bronce
Ha disminuido 1 puesto en Python (en relación al último mes)
Gráfica de Python

Clase para leer el contenido de una pagina web utilizando httplibgráfica de visualizaciones


Python

Actualizado el 19 de Marzo del 2020 por Xavi (548 códigos) (Publicado el 10 de Marzo del 2011)
18.633 visualizaciones desde el 10 de Marzo del 2011
Clase de python, que permite descargar una pagina web de Internet mediante las librerías httplib/httplib2 y urlparse. Nos devuelve el estatus, la cabecera y el contenido de la misma.

Ejemplo sin mostrar el contenido:
1
2
3
4
$ python3 file.py
(200, 'OK')
200
[('Date', 'Thu, 19 Mar 2020 07:12:22 GMT'), ('Expires', '-1'), ('Cache-Control', 'private, max-age=0'), ('Content-Type', 'text/html; charset=ISO-8859-1'), ('P3P', 'CP="This is not a P3P policy! See g.co/p3phelp for more info."'), ('Server', 'gws'), ('X-XSS-Protection', '0'), ('X-Frame-Options', 'SAMEORIGIN'), ('Set-Cookie', '1P_JAR=2020-03-19-07; expires=Sat, 18-Apr-2020 07:12:23 GMT; path=/; domain=.google.com; Secure'), ('Set-Cookie', 'NID=200=db5yd1k2NMEmhWeNBSB7eBqSDcrEU1N7M4WDCSXk_QyfurdmcX4njK8W_VWNtbq91RoeVKNJ_HA1BtvJZEJI5xgt4S5VZzC7saGyNfWeQwjumVCDAiS2Ypya6qhkz57cYXBecmjH_gmKfdVC63-na89nUCZu8ZJvlBc3beI1KdA; expires=Fri, 18-Sep-2020 07:12:22 GMT; path=/; domain=.google.com; HttpOnly'), ('Accept-Ranges', 'none'), ('Vary', 'Accept-Encoding'), ('Transfer-Encoding', 'chunked')]

Versión 1 - Python 2.x
estrellaestrellaestrellaestrellaestrella(3)

Actualizado el 19 de Marzo del 2020 (Publicado el 10 de Marzo del 2011)gráfica de visualizaciones de la versión: Versión 1 - Python 2.x
12.149 visualizaciones desde el 10 de Marzo del 2011
estrellaestrellaestrellaestrellaestrella
estrellaestrellaestrellaestrella
estrellaestrellaestrella
estrellaestrella
estrella

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
#!/usr/bin/env python
# -*- coding: utf-8 -*-
 
"""
Clase para leer el contenido de una pagina web.
Los valores que contiene son:
	self.status		contiene el estado de la conexion (200, 404, 408, ...)
	self.reason		valor en texto del status
	self.headers	una lista con el resultado de la comunicacion con el servidor
	self.read1		contiene la pagina html
Las funciones que contiene son:
	self.html_connect(self,url)	realiza la conexion con el servidor
	self.html_showStatus(self)	devuelve una tupla con self.status y self.reason
	self.html_read(self)			lee el contenido de la pagina
	self.html_showHTML(self)		devuelve el codigo HTML leido en la funcion html_read
	self.html_close(self)		cierra la conexion
"""
 
import httplib
from urlparse import urlparse
import os,sys
import socket
 
class html(object):
 
	def __init__(self):
		pass
 
	"""
	Funcion que realiza la conexion.
	Tiene que recibir: la url
	"""
	def html_connect(self,url):
		socket.setdefaulttimeout(20)
		try:
			parse=urlparse(url)
			if parse.scheme=="http":
				#self.conn=httplib.HTTPConnection(parse.netloc,timeout=60)
				self.conn=httplib.HTTPConnection(parse.netloc)
			else:
				#self.conn=httplib.HTTPSConnection(parse.netloc,timeout=60)
				self.conn=httplib.HTTPSConnection(parse.netloc)
			if parse.path=="":
				# Si no disponemos de path le ponemos la barra
				path="/"
			elif parse.query:
				# Si disponemos de path y query, realizamos el montaje
				path="%s?%s" % (parse.path,parse.query)
			else:
				# Si solo disponemos de path
				path=parse.path
			self.conn.request("GET",path)
			self.response1=self.conn.getresponse()
			self.status=self.response1.status
			self.reason=self.response1.reason
			self.headers=self.response1.getheaders()
		except socket.error:
			#errno, errstr = sys.exc_info()[:2]
			#if errno == socket.timeout:
				#print "There was a timeout"
			#else:
				#print "There was some other socket error"
			self.status=408
		except:
			self.status=404
 
	"""Muestra el estado"""
	def html_showStatus(self):
		try:
			return self.status, self.reason
		except:
			return ""
 
	"""Lee el contenido"""
	def html_read(self):
		self.read1=self.response1.read()
 
	"""Muestra el contenido"""
	def html_showHTML(self):
		if self.read1:
			return self.read1
		return ""
 
	"""Cierra la conexion"""
	def html_close(self):
		try:
			self.conn.close()
		except:
			pass
 
if __name__=="__main__":
	obj=html()
	if len(os.sys.argv)==3:
		""" Tiene que recibir la pagina a descargar y la opcion 1|2 """
		if os.sys.argv[2]=="1":
			obj.html_connect(os.sys.argv[1])
			print obj.status
		elif os.sys.argv[2]=="2":
			obj.html_connect(os.sys.argv[1])
			obj.html_read()
			print obj.html_showHTML()
	else:
		obj.html_connect("http://www.google.com")
		print obj.html_showStatus()
		print obj.status
		print obj.headers
		if obj.status==200:
			obj.html_read()
			#print obj.html_showHTML()
	obj.html_close()



Comentarios sobre la versión: Versión 1 - Python 2.x (3)

martin
29 de Abril del 2011
estrellaestrellaestrellaestrellaestrella
No sirve para nada el script.. no hace nada .. parcea mal los valores..

tuve que tocar un poco el codigo para que llegara a hacer algo poco..

no descarga nada...

saludos
Responder
josue
1 de Diciembre del 2011
estrellaestrellaestrellaestrellaestrella
me marca varios errores
Responder
Imágen de perfil
25 de Junio del 2018
estrellaestrellaestrellaestrellaestrella
Me ha funcionado perfectamente en python 2.7 sobre Linux!!
Responder

Comentar la versión: Versión 1 - Python 2.x

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad

Versión 2 - Python 3.x
estrellaestrellaestrellaestrellaestrella(1)

Publicado el 19 de Marzo del 2020gráfica de visualizaciones de la versión: Versión 2 - Python 3.x
6.485 visualizaciones desde el 19 de Marzo del 2020
http://lwp-l.com/s2041