English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Scrivere un crawler sembra non ci sia niente di meglio che usare Python, la comunità Python offre strumenti di crawling che ti lasciano senza fiato, ci sono così tante library pronte all'uso che puoi scrivere un crawler in pochi minuti. Oggi mi sto impegnando a scrivere un crawler per scaricare il tutorial di Python di Liao Xuefeng e trasformarlo in un libro elettronico PDF per facilitare la lettura offline delle persone.
Prima di scrivere lo spidere, analizziamo prima la struttura della pagina del sito web 1, la parte sinistra è l'indice del manuale, ogni URL corrisponde a un articolo di destra, la parte superiore destra è il titolo dell'articolo, la parte centrale è la parte del testo dell'articolo, il contenuto del testo è il punto focale che ci interessa, i dati che dobbiamo catturare sono la parte del testo di tutte le pagine web, la parte inferiore è il commento degli utenti, il commento degli utenti non ci serve, quindi può essere ignorato.
Preparazione degli strumenti
Dopo aver chiarito la struttura di base del sito web, possiamo iniziare a preparare i pacchetti di strumenti necessari per lo spidere. requests e beautifulsoup sono due grandi strumenti per lo spidere, requests viene utilizzato per le richieste di rete, beautifusoup viene utilizzato per operare i dati html. Con questi due strumenti, possiamo lavorare in modo veloce e efficiente, non è necessario utilizzare framework di spidere come scrapy, che ha un senso di usare un coltello per uccidere un uccello. Inoltre, poiché dobbiamo convertire i file html in pdf, è necessario avere le librerie corrispondenti, wkhtmltopdf è uno strumento molto buono, che può convertire html in pdf su piattaforme multiplatforme, pdfkit è un pacchetto di encapsulamento Python di wkhtmltopdf. Prima di tutto, installiamo i seguenti pacchetti di dipendenza:
Poi installiamo wkhtmltopdf
pip install requests pip install beautifulsoup pip install pdfkit
Installazione di wkhtmltopdf
Sul piattaforma Windows, scarica direttamente la versione stabile dal sito web ufficiale di wkhtmltopdf e installa, dopo aver completato l'installazione, aggiungi il percorso di esecuzione di questo programma alla variabile di ambiente $PATH del sistema, altrimenti pdfkit non troverà wkhtmltopdf e apparirà l'errore “No wkhtmltopdf executable found”. Ubuntu e CentOS possono installare direttamente tramite la riga di comando
$ sudo apt-get install wkhtmltopdf # ubuntu $ sudo yum intsall wkhtmltopdf # centos
Implementazione dello spidere
Dopo aver fatto tutte le preparazioni, possiamo iniziare a scrivere il codice, ma prima di scrivere il codice, è meglio organizzare i pensieri. Lo scopo del programma è salvare la parte del testo html corrispondente a tutte le URL nella locale, quindi utilizzare pdfkit per convertire questi file in un file pdf. Dividiamo il compito, prima di tutto salviamo la parte del testo html corrispondente a una certa URL nella locale, quindi eseguiamo la stessa operazione per tutte le URL.
Utilizzare il browser Chrome per trovare il tag del contenuto della pagina, premere F12 per trovare il tag div corrispondente al testo principale: <div >, il div è il contenuto testuale del sito web. Dopo aver caricato l'intera pagina localmente con requests, è possibile utilizzare beautifulsoup per operare sugli elementi dom dell'HTML per estrarre il contenuto del testo principale.
Il codice di implementazione specifico: utilizzare la funzione soup.find_all per trovare il tag del testo principale, quindi salvare il contenuto della parte del testo nel file a.html.
def parse_url_to_html(url): response = requests.get(url) soup = BeautifulSoup(response.content, "html5lib") body = soup.find_all(class_="x-wiki-content")[0] html = str(body) with open("a.html", 'wb') as f: f.write(html)
Il secondo passo è estrarre tutte le URL di parte sinistra della pagina. Utilizzando lo stesso metodo, trovare il tag del menu di parte sinistra <ul>.
Logica di implementazione del codice specifico: perché ci sono due classi uk-nav uk-nav-side sulla pagina, e la vera lista delle directory è la seconda. Tutte le url sono state acquisite, la funzione di conversione url in html è stata anche scritta nel primo passo.
def get_url_list(): "" Ottieni l'elenco di tutte le directory URL "" response = requests.get("http://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000") soup = BeautifulSoup(response.content, "html5lib") menu_tag = soup.find_all(class_="uk-nav uk-nav-side")[1] urls = [] for li in menu_tag.find_all("li"): url = "http://www.liaoxuefeng.com" + li.a.get('href') urls.append(url) return urls
L'ultimo passo è convertire html in file pdf. La conversione in file pdf è molto semplice perché pdfkit ha encapsulato tutti i logici, devi solo chiamare la funzione pdfkit.from_file
def save_pdf(htmls): "" Convertire tutti i file html in file pdf "" opzioni = { 'page-size': 'Letter', 'encoding': "UTF-8", 'custom-header': [ ('Accept-Encoding', 'gzip') ] {} pdfkit.from_file(htmls, file_name, opzioni=options)
Esegui la funzione save_pdf, il file pdf dell'elettronico viene generato, effetto visivo:
Sommario
La quantità totale di codice non supera le 50 righe, ma aspettate un momento, in realtà il codice fornito omessa alcune dettagli, come come ottenere il titolo dell'articolo, l'uso dell'etichetta img nel contenuto del testo è un percorso relativo, per mostrare correttamente le immagini nel pdf è necessario cambiare il percorso relativo in assoluto, e tutti i file temporanei html salvati devono essere cancellati, questi dettagli sono tutti messi su github.
Il codice completo può essere scaricato su github, il codice è stato testato con successo su piattaforma Windows, benvenuti a fork e scaricare per miglioramenti. Indirizzo GitHub: 3, gli studenti che non possono accedere a GitHub possono utilizzare Gitee4. Il file PDF del libro elettronico "Manuale Python di Liao Xuefeng" può essere scaricato gratuitamente seguendo il account WeChat "Un microsito di un programmatore" e rispondendo con "pdf" per leggere.