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.611 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.145 visualizaciones desde el 10 de Marzo del 2011

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.468 visualizaciones desde el 19 de Marzo del 2020
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 httplib2
from urllib.parse 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=httplib2.HTTPConnectionWithTimeout(parse.netloc)
			else:
				#self.conn=httplib.HTTPSConnection(parse.netloc,timeout=60)
				self.conn=httplib2.HTTPSConnectionWithTimeout(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 2 - Python 3.x (1)

anonimo
9 de Abril del 2020
estrellaestrellaestrellaestrellaestrella
No ha dejado ningún comentario
Responder

Comentar la versión: Versión 2 - Python 3.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

http://lwp-l.com/s2041