この期間中に研究室は映画情報を収集する必要があり、そのデータセットには 4,000 を超える映画名が含まれており、映画名に対応する映画情報をクロールするクローラーを作成する必要があります。
実際、実際の運用ではクローラは全く必要なく、簡単なPythonの基盤だけが必要です。
前提条件:
Python3 構文の基本
HTTP ネットワークの基本
最初のステップは、API プロバイダーを決定することです。対照的に、IMDb は最大の映画データベースであり、使用するための API を提供する OMDb Web サイトがあります。このウェブサイトの API は非常にフレンドリーで使いやすいです。
http://www.omdbapi.com/
2 番目のステップは、URL の形式を決定することです。
3 番目のステップは、基本的なリクエスト ライブラリの使用方法を理解することです。
http://cn.python-requests.org/zh_CN/latest/
なぜ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 を使用して実現できます。
注意、エンコード時に 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
次に、お茶を飲みながら、プログラムがどのように実行されるかを確認してください。