Heim >Backend-Entwicklung >Python-Tutorial >Python3 erhält viele Filminformationen
Das Labor muss in diesem Zeitraum Filminformationen sammeln, und der Datensatz enthält mehr als 4.000 Filmtitel. Ich muss einen Crawler schreiben, um die Filminformationen entsprechend den Filmnamen zu crawlen.
Tatsächlich sind im tatsächlichen Betrieb überhaupt keine Crawler erforderlich, sondern lediglich eine einfache Python-Grundlage.
Voraussetzungen:
Grundlagen der Python3-Syntax
Grundlagen des HTTP-Netzwerks
Der erste Schritt besteht darin, den API-Anbieter zu bestimmen. IMDb ist die größte Filmdatenbank. Im Gegensatz dazu gibt es eine OMDb-Website, die eine API zur Verwendung bereitstellt. Die API dieser Website ist sehr benutzerfreundlich und einfach zu verwenden.
http://www.omdbapi.com/
Der zweite Schritt besteht darin, das Format der URL zu bestimmen.
Der dritte Schritt besteht darin, zu verstehen, wie die grundlegende Anforderungsbibliothek verwendet wird.
http://cn.python-requests.org/zh_CN/latest/
Warum sollte ich Requests verwenden, nein Wie wäre es mit der Verwendung von urllib.request?
Da diese Python-Bibliothek anfällig für alle möglichen seltsamen Probleme ist, habe ich genug...
Der vierte Schritt besteht darin, Python-Code zu schreiben.
Ich möchte die Datei Zeile für Zeile lesen und dann den Filmnamen in dieser Zeile verwenden, um die Filminformationen abzurufen. Da die Quelldatei groß ist, kann readlines() nicht alle Filmnamen vollständig lesen, daher lesen wir sie Zeile für Zeile.
import requests for line in open("movies.txt"): s=line.split('%20\n') urll='http://www.omdbapi.com/?t='+s[0] result=requests.get(urll) if result: json=result.text print(json) p=open('result0.json','a') p.write(json) p.write('\n') p.close()
Ich habe alle Filmnamendateien im Voraus formatiert und alle Leerzeichen durch „ “ ersetzt, um die Verwendung der API zu vereinfachen (andernfalls wird ein Fehler gemeldet). Diese Funktionalität kann mit Visual Studio Code erreicht werden.
Hinweis: Wählen Sie beim Codieren die GBK-Codierung aus, andernfalls tritt der folgende Fehler auf:
1 UnicodeDecodeError: Der Codec „gbk“ kann Byte 0xff in nicht dekodieren Position 0: Unzulässige Multibyte-Sequenz
Der fünfte Schritt ist die Optimierung und Ausnahmebehandlung.
Die erste Sache ist, die API-Geschwindigkeit zu kontrollieren, um zu verhindern, dass sie vom Server blockiert wird.
Die zweite Sache ist, den API-Schlüssel zu erhalten (auch mehrere Schlüssel zu verwenden). 🎜>
Die dritte Sache: Ausnahmebehandlung.import requests 3 key=[‘’] for line in open("movies.txt"): try: #…… except TimeoutError: continue except UnicodeEncodeError: continue except ConnectionError: continueDer vollständige Code ist unten aufgeführt:
# -*- coding: utf-8 -*- import requests import time key=['xxxxx','yyyyy',zzzzz','aaaaa','bbbbb'] i=0 for line in open("movies.txt"): try: i=(i+1)%5 s=line.split('%20\n') urll='http://www.omdbapi.com/?t='+s[0]+'&apikey='+key[i] result=requests.get(urll) if result: json=result.text print(json) p=open('result0.json','a') p.write(json) p.write('\n') p.close() time.sleep(1) except TimeoutError: continue except UnicodeEncodeError: continue except ConnectionError: continueAls nächstes trinken Sie eine Tasse Tee und sehen, wie Ihr Programm läuft!