Guardar resultados en fichero
En esta clase veremos cómo podemos escribir los resultados en un fichero en vez de la consola.
Para escribir los resultados en un fichero podemos proceder de varias maneras:
. abrir un fichero y cambiar los print por write
. redirigir la salida estandard a un fichero al ejecutar el script
. redirigir la salida standard al fichero abierto desde python
Seguiremos el tercer procedimiento
# Proyecto Web Scraping para SEO con Python
# Clase 10: Guardar resultados en fichero
# webscrap10
import urllib
import re
import sys
url_sitio = «https://evginformatica.blogspot.com/»
url_inicio=url_sitio
lista_enlaces = []
titulos = []
descripciones = []
def buscar_enlaces(posicion,busqueda):
url = lista_enlaces[posicion]
htmluni = urllib.urlopen(url).read()
html=urllib.unquote(htmluni).decode(«utf-8»)
#buscar <title>
if titulos[posicion]==«»:
titulo = re.findall(«<title>.+</title>», html)
if titulo<>[]:
titulo_esp=titulo[0]
titulos[posicion]=titulo_esp[7:-8]
#buscar descripcion
#<meta content=’…’ name=’description’/>
if descripciones[posicion]==«»:
desc = re.findall(«<meta content=.+name=’description’/>», html)
if desc<>[]:
desc_esp=desc[0]
descripciones[posicion]=desc_esp[15:-22]
#buscar enlaces href
enlaces = re.findall(busqueda, html)
for enlace in enlaces:
#quitar href=’ y quitar comilla final
enlace2 = enlace[6:-1]
#enlaces excluidos
#/search
# o que contienen #
# solo paginas .html
anadir=True
if enlace2.find(«.html»)<0:
anadir=False
if enlace2.find(«/search»)>0:
anadir=False
if enlace2.find(«#»)>0:
anadir=False
if enlace2 in lista_enlaces:
anadir=False
if anadir:
lista_enlaces.append(enlace2)
titulos.append(«»)
descripciones.append(«»)
def web_scrapin():
print «— Web Scraping —«
#esto es para indicar que la codificación del fichero es utf-8 #no ascii
reload(sys)
sys.setdefaultencoding(‘utf-8’)
#redirigir salida estandard a fichero
fichero=open(‘c:\webscrap.txt’, ‘w’)
sys.stdout=fichero
print «— Información del sitio «+url_sitio
print «— Enlaces internos —«
lista_enlaces.append(url_inicio)
titulos.append(«»)
descripciones.append(«»)
posicion = 0
while True:
#print «— «+lista_enlaces[posicion]
busqueda = «href='»+url_sitio+«.+?'»
buscar_enlaces(posicion,busqueda)
busqueda = ‘href=»‘+url_sitio+‘.+?»‘
buscar_enlaces(posicion,busqueda)
posicion = posicion+1
#pruebas
#if posicion >= 2:
# break
if posicion >= len(lista_enlaces):
break
i=1
for lenlace in lista_enlaces:
print str(i)+» «+lenlace
print » Titulo: «+titulos[i-1]
print » Descripcion: «+descripciones[i-1]
i=i+1
#volver a poner la salida estandard como estaba
sys.stdout=sys.__stdout__
print «— Fin Web Scraping —«
if __name__ == «__main__»:
web_scrapin()
Para que no haya problemas con los acentos debemos indicar que la salida standard como el fichero a abrir tienen la codificación UTF-8
Para indicar que la salida estandard es UTF-8 hay que poner al principio
# -*- coding: utf-8 -*-
En la función web_scrapin cambiamos la codificación de los ficheros de texto de ascii a utf-8 con las líneas
reload(sys)
sys.setdefaultencoding(‘utf-8’)
después abrimos el fichero y redireccionamos la salida estandard a ese fichero con
fichero=open(‘c:\webscrap.txt’, ‘w’)
sys.stdout=fichero
cuando ya hemos escrito toda la información volvemos a poner la salida estandard como estaba con
sys.stdout=sys.__stdout__