视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
Python3获取大量电影信息
2020-11-27 14:17:25 责编:小采
文档
 实验室这段时间要采集电影的信息,给出了一个很大的数据集,数据集包含了4000多个电影名,需要我写一个爬虫来爬取电影名对应的电影信息。

其实在实际运作中,根本就不需要爬虫,只需要一点简单的Python基础就可以了。

前置需求:

Python3语法基础

HTTP网络基础

第一步,确定API的提供方。IMDb是最大的电影数据库,与其相对的,有一个OMDb的网站提供了API供使用。这家网站的API非常友好,易于使用。

http://www.omdbapi.com/

第二步,确定网址的格式。

第三步,了解基本的Requests库的使用方法。

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

为什么我要使用Requests,不使用urllib.request呢?

因为Python的这个库容易出各种各样的奇葩问题,我已经受够了……

第四步,编写Python代码。

我想做的是,逐行读取文件,然后用该行的电影名去获取电影信息。因为源文件较大,readlines()不能完全读取所有电影名,所以我们逐行读取。

import requests

for line in open("movies.txt"):
 s=line.split('%20
')
 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('
')
 p.close()

我预先把电影名文件全部格式化了一遍,将所有的空格替换成了"%20",便于使用API(否则会报错)。这个功能可以用Visual Studio Code完成。

注意,编码的时候选择GBK编码,不然会出现下面错误:

1 UnicodeDecodeError: 'gbk' codec can't decode byte 0xff in position 0: illegal multibyte sequence

第五步,做优化和异常处理。

主要做三件事,第一件事,控制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
')
 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('
')
 p.close()
 time.sleep(1)
 except TimeoutError:
 continue
 except UnicodeEncodeError:
 continue
 except ConnectionError:
 continue

接下来喝杯茶,看看自己的程序跑得怎么样吧!

下载本文
显示全文
专题