|
|
|
|
Strumenti |
22-08-2019, 08:07 | #1 |
Senior Member
Iscritto dal: Aug 2006
Messaggi: 1257
|
[Python] Script per scaricare solo testo di un sito
Buongiorno,
pensavo di aver vita facile su internet: ho cercato e ricercato ma non trovo nulla che mi aiuta. Avrei bisogno qualcosa di "semplice": uno script (pensavo in python, ma sono aperto ad altri linguaggi) per "scaricare" il testo di un sito web. Quindi, a partire da una lista di siti web (anche 100 o più), per ogni sito devo avere (il top sarebbe su excel) tutto il testo contenuto nelle varie pagine (quindi non solo nella home). Dopo, sarò io, penso in excel, a fare le mie analisi su questo testo. Ho visto vari esempi con scrapy (Python), ma non riesco a fare quello che vorrei. Avete dei consigli? Grazie! |
22-08-2019, 09:08 | #2 |
Senior Member
Iscritto dal: Apr 2005
Messaggi: 2993
|
non ho tempo per approfondire ma io farei uso di curl e poi un parser poi del file scaricato
quindi in step prepari una lista di siti web for line in lista curl $line output $nomesito parserizza il file di output per trovare i tag <a href> ripeti quanto sopra per una seconda volta (altirmenti rischi di andare all'infinto) end tutti i file che hai in output poi li butti in un csv (anche se non capisco il senso) |
22-08-2019, 11:28 | #3 | |
Senior Member
Iscritto dal: Aug 2006
Messaggi: 1257
|
Quote:
Non ho mai usato curl.. Quello che adesso sono riuscito a fare, usando scrapy, è semplicemente scaricare il body di un sito web: import scrapy class HeadphonesSpider(scrapy.Spider): Codice HTML:
name = "prova" def start_requests(self): urls = [ 'https://sito.it', ] for url in urls: yield scrapy.Request(url=url, callback=self.parse) def parse(self, response): body_urls = response.css('body').extract() with open('urls.txt', 'w') as f: for u in body_urls: f.write(u + "\n-------\n") Tuttavia, in questo caso mi piacerebbe almeno riuscire a togliere tutti i vari tag..per pulire un po il testo salvato |
|
22-08-2019, 12:16 | #4 | |
Senior Member
Iscritto dal: Aug 2006
Messaggi: 1257
|
Quote:
Spero di essermi spiegato bene. Grazie |
|
22-08-2019, 14:29 | #5 | |
Senior Member
Iscritto dal: Apr 2005
Messaggi: 2993
|
Quote:
Comunque credo che qua trovi la risposta: https://stackoverflow.com/questions/...t-text-extract |
|
23-08-2019, 09:03 | #6 | |
Senior Member
Iscritto dal: Aug 2006
Messaggi: 1257
|
Quote:
Codice HTML:
import scrapy from bs4 import BeautifulSoup class HeadphonesSpider(scrapy.Spider): name = "prova" def start_requests(self): urls = [ 'https://sito1.it', 'https://sito2.it' ] for url in urls: yield scrapy.Request(url=url, callback=self.parse) def parse(self, response): body_urls = response.css('body').extract() new_body = str(body_urls) soup = BeautifulSoup(new_body, 'html.parser') just_text = soup.get_text() just_text= just_text.replace('\\n',' ') with open('urls.csv', 'w') as f: for u in body_urls: f.write(just_text + "\nBLABLA") f.close() 1 - nel file csv, non viene scritto tutto solo in una cella..ma in 3-4 tipo..e non capisco come mai 2 - nell'esempio ho messo due siti internet, ma alla fine mi controlla solo nel primo sito Pero, ho fatto passi da giganti, grazie!! |
|
23-08-2019, 10:07 | #7 |
Senior Member
Iscritto dal: Apr 2005
Messaggi: 2993
|
Per il primo punto faccio una ipotesi:
nel testo che prendi sono presenti , e ; . Soluzione: fai una sostituzione nel testo dei doppia apici (") con un escape (\") e poi metti tutto il testo che ottieni tra doppi apici. In questo modo quanto importi lo considera un unico campo Per il secondo punto non sono in grado di aiutarti |
11-09-2019, 16:46 | #8 | |
Senior Member
Iscritto dal: Aug 2006
Messaggi: 1257
|
Quote:
Riesco quindi ad andare in una pagina, prendere il testo e togliere i vari tag! Ora, sto cercando come fare per ottenere tutte le pagine di un sito web, per poi avviare lo script. Purtroppo, vedo che non tutti posseggono un sitemap (o magari sbaglio?) che renderebbe il lavoro molto piu facile... |
|
31-10-2019, 10:33 | #9 | |
Senior Member
Iscritto dal: Aug 2006
Messaggi: 1257
|
Quote:
|
|
13-12-2019, 14:05 | #10 |
Senior Member
Iscritto dal: Aug 2006
Messaggi: 1257
|
Riscrivo..perché adesso avrei bisogno di analizzare le pagine di un sito, ma solo quelle in inglese (se esiste la versione in inglese).
Il problema è che se no mi ritrovo ad analizzare siti multilingua (con più di 5 lingue) e quindi di un contenuto identico ma in lingue differenti. Sto utilizzando scrapy, nel setting.py si può settare la lingua di default dello spyder, ma questo significa solo che partirà dalle pagine in inglese, per poi continuare con le altre lingue. Come posso fare? Grazie |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 04:34.