ホームページ  >  記事  >  バックエンド開発  >  Python3 は多くの映画情報を取得します

Python3 は多くの映画情報を取得します

高洛峰
高洛峰オリジナル
2016-10-29 10:44:172103ブラウズ

この期間中に研究室は映画情報を収集する必要があり、そのデータセットには 4,000 を超える映画名が含まれており、映画名に対応する映画情報をクロールするクローラーを作成する必要があります。

実際、実際の運用ではクローラは全く必要なく、簡単なPythonの基盤だけが必要です。

前提条件:

Python3 構文の基本

HTTP ネットワークの基本

最初のステップは、API プロバイダーを決定することです。対照的に、IMDb は最大の映画データベースであり、使用するための API を提供する OMDb Web サイトがあります。このウェブサイトの API は非常にフレンドリーで使いやすいです。

http://www.omdbapi.com/

2 番目のステップは、URL の形式を決定することです。

Python3 は多くの映画情報を取得します

3 番目のステップは、基本的なリクエスト ライブラリの使用方法を理解することです。

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

Python3 は多くの映画情報を取得します

なぜurllib.requestの代わりにリクエストを使用する必要があるのですか?

この Python ライブラリはあらゆる種類の奇妙な問題を起こしやすいため、もう十分です...

4 番目のステップは、Python コードを作成することです。

私がやりたいのは、ファイルを 1 行ずつ読み取り、その行のムービー名を使用してムービー情報を取得することです。ソース ファイルが大きいため、readlines() ではすべてのムービー名を完全に読み取ることができないため、行ごとに読み取ります。

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()

API を使いやすくするために、事前にすべてのムービー名ファイルをフォーマットし、すべてのスペースを「%20」に置き換えました (そうしないとエラーが報告されます)。この機能は、Visual Studio Code を使用して実現できます。

Python3 は多くの映画情報を取得します

注意、エンコード時に GBK エンコードを選択してください。そうでないと、次のエラーが発生します:

1 UnicodeDecodeError: 'gbk' コーデックは位置 0 のバイト 0xff をデコードできません: 不正なマルチバイト シーケンスです

ステップ 5、最適化を実行しますそして例外処理。

主に 3 つのことを行います。1 つ目は、サーバーによってブロックされないように API 速度を制御することです。

2 つ目は、API キーを取得することです (複数のキーを使用することもできます)。3 つ目は、例外処理です。

import requests 3 
key=[‘’]

for line in open("movies.txt"):
    try:
        #……
    except TimeoutError:
        continue
    except UnicodeEncodeError:
        continue
    except ConnectionError:
        continue

完全なコードは以下に掲載されています:

# -*- 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

次に、お茶を飲みながら、プログラムがどのように実行されるかを確認してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。