Heim >Backend-Entwicklung >Python-Tutorial >Python3 erhält viele Filminformationen

Python3 erhält viele Filminformationen

高洛峰
高洛峰Original
2016-10-29 10:44:172154Durchsuche

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.

Python3 erhält viele Filminformationen

Der dritte Schritt besteht darin, zu verstehen, wie die grundlegende Anforderungsbibliothek verwendet wird.

http://cn.python-requests.org/zh_CN/latest/

Python3 erhält viele Filminformationen

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.

Python3 erhält viele Filminformationen

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:
        continue
Der 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:
        continue
Als nächstes trinken Sie eine Tasse Tee und sehen, wie Ihr Programm läuft!

Python3 erhält viele Filminformationen

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn