Despues de ver este capitulo de mejorando.la , senti curiosidad por Scrapy , un framework para scraping y crawling , algo asi como "raspar y arrastrarse" en sitios web y obtener informacion incluidas en las paginas que componen el sitio.
Hace poco tiempo, necesite este framework, porque me encontraba buscando presentaciones sobre Oracle Weblogic 11g y el sitio, que tenia una presentacion bueno, no me permitia bajarla. Asi que se me prendio la lamparita y comence a buscar , en el codigo HTML informacion que me sirviera para obtener las SLIDES.
Requerimientos:
-Scrapy
-Python
-Distrubucion de linux que te guste. (Use Linux Mint)
Para Arrancar el codigo se usa:
scrapy crawl slideshareWeb (Enter)
Estando en el directorio de la applicacion que contruyeron; pero mas claro este en el Tutorial que adjunte como link externo.
import urllib2
import tarfile
import os
from os.path import basename
from urlparse import urlsplit
from scrapy.spider import BaseSpider
from scrapy.selector import HtmlXPathSelector
from slideshareWeb.items import SlidesharewebItem
class slideshareWebSpider(BaseSpider):
name = "slideshareWeb"
allowed_domains = ["slideshare.net"]
start_urls = [
"http://es.slideshare.net/JustinKestelyn/oracle-weblogic-server-12c-developer-overview"
]
def messages(self, msg_text):
print "--------------------------------------------------------------------------------------"
print msg_text
print "--------------------------------------------------------------------------------------"
def delete_file(self, file_name):
os.remove(file_name)
def make_tar(self, tar_filename, files_compress):
self.messages( "Building Tar File..."+ tar_filename)
tar = tarfile.open(tar_filename, "w:gz")
for name in files_compress:
tar.add(name)
#Delete image file
self.delete_file(name)
tar.close()
return
def parse(self, response):
hxs = HtmlXPathSelector(response)
title = hxs.select('//title/text()').extract()
self.messages("Extracting slides from : " + title[0])
link_slides = hxs.select('//link[contains(@media, "handheld")]/@href').extract()
fileTar = basename(urlsplit(link_slides[0])[2])+'.tar'
stats = hxs.select('//img[@class="slide_image"]')
count = 0
items = []
files_comp = []
for stat in stats:
l_normal = stat.select('@data-normal').extract()
l_full = stat.select('@data-full').extract()
item = SlidesharewebItem()
item['number'] = count
item['link_normal'] = l_normal[0]
item['link_full'] = l_full[0]
items.append(item)
count +=1
try:
imgData = urllib2.urlopen(l_full[0]).read()
fileName = basename(urlsplit(l_full[0])[2])
print "Downloading : ", fileName
output = open(fileName,'wb')
output.write(imgData)
output.close()
files_comp.append(fileName)
except:
pass
if count>0:
try:
self.delete_file(fileTar)
except:
pass
self.make_tar(fileTar, files_comp)
else:
self.messages("NO Slides in " + title[0] + " maybe SWFObject :-( ")
return items
¿Por qué el Transbordador Espacial necesita despegar anexado a dos cohetes (llamados Solid Rocket Boosters o Cohetes Aceleradores Sólidos ) y un inmenso tanque de combustible? ¿Por qué no simplemente despega como cualquier otro avión para subir, subir, subir hasta llegar al espacio? Esto es porque el proceso para salir de la atmósfera y poner en órbita a una nave es un poco más complicado de lo que nos imaginamos. Para lograrlo es necesario que el Transbordador Espacial obtenga cierta velocidad pero también una trayectoria específica que es mucho más horizontal que vertical, aunque esto no sea obvio porque simplemente vemos que la nave "sube". La imagen que acompaña este post evidencia el "camino" arqueado (como nuestro cielo/planeta). A una aceleración suficiente, el Transbordador sale al espacio, caso contrario llegaría a un techo y no podría elevarse más ( Actualizacion: al mantener órbitas bajas el transbordador no necesita alcanzar velocidad de escape).
Hoy me llego el envio de Sparkfun con mi Pan/Tilt Bracket y unos Servos. Con ellos me decidi a realizar algunas pruebas que mostrare a continuacion. Elementos a utilizar: DuinoBot v1.2 ( RobotGroup ARG) Pan/Tilt Bracket (Paneos) Servos Protoboards Jumpers Potenciometro Tambien codifique con la IDE de Arduino para que estos elementos "se fusionaran" en mi TEST. ;-) Codigo Parcial void setup(){ servoTilt.attach(2); //The Tilt servo is attached to pin 2. //servoPan.attach(3); //The Pan servo is attached to pin 3. servoTilt.write(10); //Initially put the servos both //servoPan.write(40); //at 90 degress. Serial.begin(57600); //Set up a serial connection for 57600 bps. } void loop(){ val = analogRead(potpin); // reads the value of the potentiometer (value between 0 and 1023) val = map(val, 0, 1023, 0, 179); // scale it to use it with the servo (value between 0 and 180) servoTilt.write(val);
Comentarios