vademecum_medicamentos - MutakamwoyoCloud/MCloud GitHub Wiki
Este módulo es distinto a los demás, ya que no es una api a la que llamar para que realize las operaciones, sino que necesita ser llamado como un script a través de la llamada scrapy.
Para poder ejecutar este módulo se necesita realizar el siguiente comando: scrapy runspider <fileSider.p>
, esta llamada activará el sistema y se pondrá a realizar la descarga de los contenidos.
Como el Vademecum es un archivo demasiado grande de medicamentos, se ha optado por descargar letra a letra cada vez que se le llame al script, el número de la letra se decide a través de un fichero de configuración llamado config.txt
este fichero contiene únicamente el número de letra que se debe descargar, aumenta cada vez que se descarga una letra.
Para realizar la descarga total de los contenidos por nombres, el sistema consta de dos clases:
- Post
- MySpider
MySpider
Esta clase, es la clase principal que realiza la mayor parte de la lógica del módulo. Consta de una sección principal en la que se realizan las lecturas y escrituras del fichero config.txt
y configura el spider.
class mySpider(Spider):
exit = 1
num = 0
try:
print "mySpider ok"
f = open("config.txt", 'r')
num = int(f.read())
f.close()
except IOError:
f = open("config.txt", 'w')
exit = 0
name = 'mySpider'
start_urls = ["http://www.vademecum.es/medicamentos-"+ABECEDARIO[num]+"_1"]
print (num)
num = num + 1
if num > 24:
num = 0
if exit:
f = open("config.txt", 'w')
f.write(str(num))
f.close()
Esta clase también contiene un parseador de las urls obtenidas por el spider, este parseador realiza un parseo de los datos y crea un objeto de la clase Post con los datos que esta necesita.
def parse(self, response):
sel = Selector(response)
sites = sel.xpath('//ul[@class="no-bullet"]//li')
items = []
for site in sites:
post = Post()
post['title'] = site.xpath('a/text()').extract()
post['url'] = site.xpath('a/@href').extract()
items.append(post)
for post in items:
post.download()
return items
Post
Esta clase auxiliar del módulo es la encargada de realizar la descarga de los contenidos y almacenarlos en documentos.html, para ello utiliza los datos proporcionados por la funcion parse
de la clase MySpider. Estos datos son:
- url: necesaria para la descarga.
- title: nombre del medicamento a descargar, este nombre es el que tomará el documento .hmtl.
class Post(Item):
url = Field()
title = Field()
def download(self):
url = 'http://www.vademecum.es'+str(self['url'][0])
soup = BeautifulSoup(urlopen(url))
div = soup.findAll("div", { "class" : "left" })
title = str(self['url'][0]).split('/')
#gs = goslate.Goslate()
#div = gs.translate(str(div), 'fr')
f = open("./vademecum/resultsMedicamentos/"+title[1] +".html", 'w')
f.write("<!DOCTYPE html>\
<html>\
<head>\
<meta http-equiv='Content-Type' content='text/html; charset=utf-8'/>\
</head>\
<body>")
f.write(str(div))
f.write("</body>\
</html>")
f.close()
- Scrapy
- Goslate