[GRATIS] Revistas MagPi y Hackspace en PDF +Proyectos
ordenados
hilos
+ valorados
Yvar
ForoIngenieros: miembro
Abr 2018 | 457 Mens.
Acabo de descubrir estas revistas con proyectos para la Raspberry Pi y creaciones (impresión 3D, Arduino, ingeniería..) y que están disponibles para descargar en PDF de forma totalmente gratuita :cantarin: Así que las comparto con vosotros y espero que os resulten de utilidad!
Revista MagPi
Revista HackSpace




Fuente: https://www.neoteo.com/magpi-revistas-con-proyectos-de-raspberry-pi-gratis-para-descargar-en-pdf/
Azufaifo ∙ UNEX
Ingeniería informática
Abr 2018 | 0 Mens.
Univ.: UNEX
La de magpi la conocía, la otra no. Me la apunto :mola:
0
Paula ∙ UJI
Estudiante (Industrial)
Abr 2018 | 28 Mens.
Univ.: UJI
No las conocía, gracias por el aporte. :-)
0
Prof.bakterio ∙ UPV-EHU
ForoIngenieros: miembro
Abr 2018 | 0 Mens.
Univ.: UPV-EHU
Gracias shur!
0
Valher ∙ UVA
Ing. Téc. Industrial
Abr 2018 | 208 Mens.
Univ.: UVA
Tenia algun recopilatorio de magpi, no sabia que estaban todas gratuitamente.
0
steleco ∙ UPM
Teleñeco
Abr 2018 | 392 Mens.
Univ.: UPM
Muchas gracias por compartir :mola:
0
Azufaifo ∙ UNEX
Ingeniería informática
Abr 2018 | 0 Mens.
Univ.: UNEX
Para los que le guste trastear, con selenium y Python te puedes hacer un script que te descargue automáticamente todas las revistas xD
0
thaks
ForoIngenieros: miembro
Abr 2018 | 283 Mens.
#6 puedes dar más info?
0
Azufaifo ∙ UNEX
Ingeniería informática
Abr 2018 | 0 Mens.
Univ.: UNEX
Cita:
Originalmente escrito por Thakker
#6 puedes dar más info?

Sep. Selenium es una librería para testeo de aplicaciones web. Realmente lo que permite es abrir una pestaña del navegador y hacer pulsaciones de forma automática como si las estuviera realizando un usuario real, de esta forma puedes hacer que vaya accediendo a los enlaces de cada PDF y los vaya descargando.

Yo he estado probando antes y en un rato he conseguido que descargara de MagPi las publicaciones mensuales. Si a alguien le interesa puedo dejar por aquí el código cuando lo modifique para que descargue también los números especiales.
0
thaks
ForoIngenieros: miembro
Abr 2018 | 283 Mens.
#8 pues sería genial si lo compartes, gracias!!!
0
vien2 ∙ UCAM
Ingeniería Informática
Abr 2018 | 0 Mens.
Univ.: UCAM
#8 Me vendría de lujo shur.

Esperandolo por aquí
0
Valher ∙ UVA
Ing. Téc. Industrial
Abr 2018 | 208 Mens.
Univ.: UVA
#8 Gracias por la info, la probaré para alguna otra aplicación.
0
Dohlinder ∙ UNIOVI
Ingeniería eléctrica
Abr 2018 | 22 Mens.
Univ.: UNIOVI
Gracias
0
Yvar
ForoIngenieros: miembro
Abr 2018 | 457 Mens.
Me alegra que os guste compañeros :-)

@Azufaifo rúlate ese script :-P
0
Aluisäo
ForoIngenieros: miembro
Abr 2018 | 35 Mens.
Pillo sitio!
0
jomarkata ∙ UAH
ForoIngenieros: miembro
Abr 2018 | 0 Mens.
Univ.: UAH
Pillo sitio
0
Azufaifo ∙ UNEX
Ingeniería informática
Abr 2018 | 0 Mens.
Univ.: UNEX
@Thakker @vien2 @Yvar Ya lo tengo completo :cantarin:
(Está hecho para que funcione con Firefox, para chrome u otros navegadores habría que cambiar algunas líneas del principio)

Primero hay que descargar geckodriver de aquí https://github.com/mozilla/geckodriver/releases e instalar las librerías que no tengáis, y cambiar las rutas download_path y geckodriver_path.

Está hecho para que primero mire que revistas hay ya en la carpeta y descargue solamente las que falten.

Código:
from selenium import webdriver
from bs4 import BeautifulSoup
import requests
import time
import os.path

download_path = "Ruta_de_la_carpeta_donde_queréis_descargar"
geckodriver_path = "Ruta_del_archivo_geckodriver"


fp = webdriver.FirefoxProfile()

fp.set_preference("browser.download.folderList", 2)
fp.set_preference("browser.download.manager.showWhenStarting",False)
fp.set_preference("browser.download.dir", download_path)
fp.set_preference("browser.helperApps.neverAsk.saveToDisk", "application/pdf,application/x-pdf")

fp.set_preference("pdfjs.disabled", True)



url = 'https://www.raspberrypi.org/magpi-issues/'
PDFs = []

req = requests.get(url)
status_code = req.status_code

if status_code == 200:
html = BeautifulSoup(req.text, 'html.parser')

for a in html.find_all('a'):
link = a.get('href')

if link.find('.pdf') > 0 and os.path.isfile(download_path + '/' + link) == False:
PDFs.append(link)

else:
print("Status Code %d" % status_code)
exit()

if PDFs:
driver = webdriver.Firefox(executable_path=geckodriver_path, firefox_profile=fp)

for link in PDFs:
driver.get(url + link)
button = driver.find_element_by_id('download')
button.click()

while True:
time.sleep(0.5)
if os.path.isfile(download_path + '/' + link) and os.path.isfile(download_path + '/' + link + '.part') == False:
break

driver.close()

else:
print("No hay PDF's nuevos")



PD: He aprendido a utilizar las librerías estas sobre la marcha así que seguramente hay una mejor forma de hacerlo, si alguien se le ocurre que nos ilumine. :dale2:

PD2: Hay partes del código que han quedado mal indentadas al copiarlo aquí y no me deja arreglarlo. :dale2:X2
0
thaks
ForoIngenieros: miembro
Abr 2018 | 283 Mens.
#16 muchas gracias shur, recomiendas alguna web o algo donde aprender estas cosillas? Admiro a la gente que llega a conocer librerías como la que expones de geckodriver, no sé cómo llegais a conocer cosas tan específicas.
0
Azufaifo ∙ UNEX
Ingeniería informática
Abr 2018 | 0 Mens.
Univ.: UNEX
#17 Pues en mi caso por ejemplo, en mi universidad se creó una comunidad de python y de vez en cuando dan charlas y tal, en una de esas charlas hablaron del web scraping y mencionaron las librerías que he utilizado para este script. Luego todo es ir a google y seguir buscando información del tema.
0
Nayoric ∙ UNED
ForoIngenieros: miembro
Abr 2018 | 0 Mens.
Univ.: UNED
Gran aporte muchas gracias
0
Azufaifo ∙ UNEX
Ingeniería informática
Abr 2018 | 0 Mens.
Univ.: UNEX
#16 He hecho una nueva versión que no utiliza Selenium, así el script no necesita abrir el navegador y tampoco es necesario descargar el archivo geckodriver. Solamente es necesario tener instaladas las librerías request y BeautifulSoup.

Código:
from bs4 import BeautifulSoup
import requests
import os.path

download_path = "/media/jose/USB/MagPi"


url = 'https://www.raspberrypi.org/magpi-issues/'
PDFs = []

req = requests.get(url)
status_code = req.status_code

if status_code == 200:
html = BeautifulSoup(req.text, 'html.parser')

for a in html.find_all('a'):
link = a.get('href')

if link.find('.pdf') > 0 and os.path.isfile(download_path + '/' + link) == False:
PDFs.append(link)

else:
print("Status Code %d" % status_code)
exit()

if PDFs:

print("{} PDF's nuevos".format(len(PDFs)))
i = 1

for link in PDFs:
print('({}) Descargando {}...'.format(i, link))
i += 1

req = requests.get(url + link, stream=True)

with open(download_path + '/' + link, 'wb') as f:
try:
f.write(req.content)
except IOError as error:
print(str(error))
os.remove(download_path + '/' + link)
exit()

print('Descarga completada!')
else:
print("No hay PDF's nuevos")
0
omkh2 ∙ US
Ingeniería Electrónica Industr
Abr 2018 | 30 Mens.
Univ.: US
genio y figura
0
Atchumbakar ∙ UCLM
ForoIngenieros: miembro
Abr 2018 | 0 Mens.
Univ.: UCLM
Gracias por el aporte!
0
Trastamare
ForoIngenieros: miembro
May 2018 | 62 Mens.
Muy buen aporte! Muchas gracias :mola:
0
cardan
ForoIngenieros: miembro
Abr 2018 | 32 Mens.
Cita:
Originalmente escrito por Azufaifo
#16 He hecho una nueva versión que no utiliza Selenium, así el script no necesita abrir el navegador y tampoco es necesario descargar el archivo geckodriver. Solamente es necesario tener instaladas las librerías request y BeautifulSoup.

Código:
from bs4 import BeautifulSoup
import requests
import os.path

download_path = "Ruta_de_la_carpeta_donde_queréis_descargar"


url = 'https://www.raspberrypi.org/magpi-issues/'
PDFs = []

req = requests.get(url)
status_code = req.status_code

if status_code == 200:
html = BeautifulSoup(req.text, 'html.parser')

for a in html.find_all('a'):
link = a.get('href')

if link.find('.pdf') > 0 and os.path.isfile(download_path + '/' + link) == False:
PDFs.append(link)

else:
print("Status Code %d" % status_code)
exit()

if PDFs:

print("{} PDF's nuevos".format(len(PDFs)))
i = 1

for link in PDFs:
print('({}) Descargando {}...'.format(i, link))
i += 1

req = requests.get(url + '/' + link, stream=True)

with open(download_path + '/' + link, 'wb') as f:
f.write(req.content)

print('Descarga completada!')
else:
print("No hay PDF's nuevos")


Pillo código, super interesante lo del web scrapping :number1:
1
JavierRodriguez ∙ UPNA
ForoIngenieros: miembro
Jul 2018 | 0 Mens.
Univ.: UPNA
interesante
0
luismg ∙ UNIR
ForoIngenieros: miembro
Ago 2018 | 35 Mens.
Univ.: UNIR
Cita:
Originalmente escrito por Azufaifo
@Thakker @vien2 @Yvar Ya lo tengo completo :cantarin:
(Está hecho para que funcione con Firefox, para chrome u otros navegadores habría que cambiar algunas líneas del principio)

Primero hay que descargar geckodriver de aquí https://github.com/mozilla/geckodriver/releases e instalar las librerías que no tengáis, y cambiar las rutas download_path y geckodriver_path.

Está hecho para que primero mire que revistas hay ya en la carpeta y descargue solamente las que falten.

Código:
from selenium import webdriver
from bs4 import BeautifulSoup
import requests
import time
import os.path

download_path = "Ruta_de_la_carpeta_donde_queréis_descargar"
geckodriver_path = "Ruta_del_archivo_geckodriver"


fp = webdriver.FirefoxProfile()

fp.set_preference("browser.download.folderList", 2)
fp.set_preference("browser.download.manager.showWhenStarting",False)
fp.set_preference("browser.download.dir", download_path)
fp.set_preference("browser.helperApps.neverAsk.saveToDisk", "application/pdf,application/x-pdf")

fp.set_preference("pdfjs.disabled", True)



url = 'https://www.raspberrypi.org/magpi-issues/'
PDFs = []

req = requests.get(url)
status_code = req.status_code

if status_code == 200:
html = BeautifulSoup(req.text, 'html.parser')

for a in html.find_all('a'):
link = a.get('href')

if link.find('.pdf') > 0 and os.path.isfile(download_path + '/' + link) == False:
PDFs.append(link)

else:
print("Status Code %d" % status_code)
exit()

if PDFs:
driver = webdriver.Firefox(executable_path=geckodriver_path, firefox_profile=fp)

for link in PDFs:
driver.get(url + link)
button = driver.find_element_by_id('download')
button.click()

while True:
time.sleep(0.5)
if os.path.isfile(download_path + '/' + link) and os.path.isfile(download_path + '/' + link + '.part') == False:
break

driver.close()

else:
print("No hay PDF's nuevos")



PD: He aprendido a utilizar las librerías estas sobre la marcha así que seguramente hay una mejor forma de hacerlo, si alguien se le ocurre que nos ilumine. :dale2:

PD2: Hay partes del código que han quedado mal indentadas al copiarlo aquí y no me deja arreglarlo. :dale2:X2



Te juro que estaba pensando en hacer esto una vez que he visto que eran 71 links, menos mal que he tenido suerte y le he dado a la rueda del raton :-)
1
AlexCC ∙ ULPGC
Estudiante de Ing. Informática
Jun 2018 | 0 Mens.
Univ.: ULPGC
Pillo sitio, gracias shur!
0
ProgramCods ∙ UM
ForoIngenieros: miembro
Abr 2018 | 167 Mens.
Univ.: UM
Up, perfecto para entretenerse en verano!
0
Compartir en
Twitter
Whatsapp
Telegram
Facebook