首頁 >後端開發 >Python教學 >Python3獲取大量電影訊息

Python3獲取大量電影訊息

高洛峰
高洛峰原創
2016-10-29 10:44:172155瀏覽

實驗室這段時間要採集電影的信息,給了一個很大的數據集,數據集包含了4000多個電影名,需要我寫一個爬蟲來爬取電影名對應的電影信息。

 其實在實際運作中,根本就不需要爬蟲,只需要一點簡單的Python基礎就可以了。

 前置需求:

Python3語法基礎

HTTP網路基礎

第一步,決定API的提供者。 IMDb是最大的電影資料庫,與其相對的,有一個OMDb的網站提供了API供使用。這家網站的API非常友好,易於使用。

http://www.omdbapi.com/

第二步,決定網址的格式。

Python3獲取大量電影訊息

第三步,了解基本的Requests函式庫的使用方法。

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

Python3獲取大量電影訊息

為什麼我要使用Requests,不使用urllib.request呢?

因為Python的這個庫容易出各種各樣的奇葩問題,我已經受夠了…

 

第四步,編寫Python程式碼。

我想做的是,逐行讀取文件,然後用該行的電影名去獲取電影資訊。因為原始檔較大,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()

我預先把電影名稱檔案全部格式化了一遍,將所有的空格替換成了"%20",便於使用API​​(否則會報錯)。這個功能可以用Visual Studio Code完成。

Python3獲取大量電影訊息

注意,編碼的時候選擇GBK編碼,不然會出現下面錯誤:

1 UnicodeDecodeError: 'gbk' codec can't decode byte 0xff in position 0: 3qummby qummyl影響優化和異常處理。

主要做三件事,第一件事,控制API速度,防止被伺服器屏蔽;

第二件事,取得API key(甚至使用多個key)

第三件事:異常處理。

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