Package: paleocirc
paleocircAPI web scraping per ottenere circolari dal sito dell'I.T.I.S. Paleocapa di BergamoInstallazionePer installare questa libreria Ã¨ necessario eseguirepip install paleocircin un terminale.UtilizzoRicavare informazioni di una paginaPuoi ottenere le informazioni di una pagina utilizzandofrompaleocirc.circolariimportCircolaricircolari=Circolari()circolare=circolari.getPages(numero_pagine)Nota: getPages(n) ritorna le primenpagine di circolari (ciÃ² significa che passando 2, ritornerÃ  le prime due pagine). Per otteneresolola seconda pagina, bisogna passare "_range=False" nel metodo:getPages(2, _range=False)Ricavare informazioni di una circolarePuoi ottenere le informazioni di una circolare utlizzandofrompaleocirc.circolariimportCircolaricircolari=Circolari()circolare=circolari.get(numero_circolare)circolare.number#stringa: numero circolare (ad esempio 21, 250 bis)circolare.name#stringa: nome della circolarecircolare.date#stringa: data in cui la circolare Ã¨ uscitacircolare.url#stringa: URL che porta alla pagina della circolare (non agli allegati)circolare.restricted#bool: True se la circolare Ã¨ solo per i membri dello staff, altrimenti FalseOttenere tutte le circolari dallanfino all'ultimaSe vogliamo ottenere tutte le circolari dopo lan, possiamo farlo utilizzando la funzione getFrom().
Questo puÃ² essere molto pratico se utilizzato per ottenere le circolari appena escono, come in questo esempio:frompaleocirc.circolariimportCircolariimporttimecircolari=Circolari()whileTrue:withopen('latest.txt','w')asfile:#apri il file latest.txt, dove viene#salvato il numero dell'ultima circolarecircolareList=circolari.getFrom(file.read())#ottieni ogni circolare uscita dopo nforcircolareincircolareList:#esegui operazione su# esegui operazioni                             #ogni circolarefile.write(circolareList[0].number)#salva l'ultima circolare in latest.txttime.sleep(1800)#ripeti l'operazione dopo 30 minutiScaricare una circolareÃˆ anche possibile scaricare le circolari utilizzando:frompaleocirc.circolariimportCircolaricircolari=Circolari()circolare=circolari.get(numero_circolare)downloads=circolare.download(path=percorso_file,#stringa: obbligatorio, la cartella in cui verrÃ#scaricata la circolare (esempio: 'circolari')pngConvert=False,#bool: opzionale, se impostata su True converte i PDF in PNGdocConvert=False,#bool: opzionale, se impostata su True converte#i DOC e i DOCX in PNG (SOLO SU WINDOWS)keepDoc=False,#bool: opzionale, se impostata su True mantiene i file#DOC e DOCX dopo la conversione in PDFpoppler=None#stringa: opzionale, percorso di poppler per la#conversione in PNG, se poppler non Ã¨ presente in PATH)>>>downloads{'1':{'name':'Nome primo allegato','filename':'path/to/attachment1',files:['path/to/png1','path/to/png2']},'2':{'name':'Nome secondo allegato','filename':'path/to/attachment2',files:['path/to/png1','path/to/png2']}}Nota: per convertire gli allegati in PDF Ã¨ necessario avere poppler installato (https://github.com/oschwartz10612/poppler-windows/releases/) che deve essere presente in PATH. Se per qualche motivo Python non dovesse rilevare poppler in PATH, allora si puÃ² specificare il suo percorso quando si scarica una circolare, passando il percorso del file usando "poppler=path/to/poppler/bin".Inoltre, per convertire gli allegati in DOC e DOCX Ã¨necessarioavere Microsoft Word installato su un sistema operativo Windows.Archivio di circolariPer evitare di scaricare una circolare ogni volta, si puÃ² anche utilizzare un archivio.frompaleocirc.circolariimportCircolaricircolari=Circolari(archiveDir=archivePath)#passando "archiveDir" quando chiamiamo#la libreria, creiamo un archivio.circolare=circolare.get(numero_circolare)#quando l'archivio Ã¨ stato caricato, la libreria cercherÃ#la circolare al suo interno prima di fare una richiesta al sito.circolare.download()#La circolare viene automaticamente scaricata nell'archivio,#se "path" viene specificato verrÃ  ignorato.Nota: Ã¨ altamente consigliato utilizzare un archivio di circolari quando possibile.Eliminare una circolareÃˆ possibile eliminare tutti i file di una circolare e, se un archivio Ã¨ stato caricato, anche le informazioni da esso.frompaleocirc.circolariimportCircolaricircolari=Circolari(archiveDir=archivePath)circolare=circolare.get(numero_circolare)circolare.download(pngConvert=True)circolare.delete(archive=True,#bool: opzionale, se impostato su True (default)#elimina la circolare dall'archivio (se caricato e se la circolare Ã¨ presente)files=True#bool: opzionale, se impostato su True (default)#elimina tutti i file relativi alla circolare (se esistono))AsyncOltre alla versione sync, questa libreria presenta anche una scritta in async. Ãˆ consigliato utilizzare questa quando possibile, perchÃ© non ferma tutto il codice quando viene fatta una richiesta al sito. I metodi sono gli stessi, ma funzionano in modo un po' diverso.
Per importare la versione asincrona Ã¨ necessario usarefrompaleocirc.circolariasyncimportCircolariOttenere circolari in modo asincronoPer utilizzare la versione asincrona bisogna chiamare i metodo usando "await" all'interno di una funzione asincrona.
I metodi che richiedono l'await sono quelli che fanno richieste al sito, cioÃ¨:awaitcircolari.getPages()awaitcircolari.get()awaitcircolari.getFrom()awaitcircolare.download()Per chiamareCircolari()Ã¨ necessario utilizzareasync with:frompaleocirc.circolariasyncimportCircolariimportasyncioasyncdefmain():asyncwithCircolari(archiveDir=archivePath)ascircolari:circolare=awaitcircolari.get(numero_circolare)awaitcircolare.download()...circolare.delete()# Codice necessario per eseguire la funzione in modo asincronoloop=asyncio.get_event_loop()loop.run_until_complete(main())loop.close()