Python3获取大量电影信息

实验室这段时间要采集电影的信息,给出了一个很大的数据集,数据集包含了4000多个电影名,需要我写一个爬虫来爬取电影名对应的电影信息。

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

 前置需求:

Python3语法基础

HTTP网络基础

立即学习“Python免费学习笔记(深入)”;

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

http://www.omdbapi.com/

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

1.png

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

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

1.png

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

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

 

第四步,编写Python代码。

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

import requestsfor 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完成。

1.png

注意,编码的时候选择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 requestsimport timekey=['xxxxx','yyyyy',zzzzz','aaaaa','bbbbb']i=0for 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

登录后复制

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

1.png

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2283421.html

(0)
上一篇 2025年2月27日 20:08:18
下一篇 2025年2月27日 20:08:35

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • python 序列化之JSON和pickle详解

    JSON模块 json(javascript object notation) 是一种轻量级的数据交换格式。它基于ecmascript的一个子集。 json采用完全独立于语言的文本格式,但是也使用了类似于c语言家族的习惯(包括c、c++、j…

    2025年2月27日
    200
  • Python字符串

    如下学习python的字符串用法。 print(dir(str)) [‘__add__’, ‘__class__’, ‘__contains__’, ‘__…

    编程技术 2025年2月27日
    200
  • python三级菜单

    menu = {    ‘北京’:{        ‘海淀’:{            ‘五道口’:{                ‘soho’:{},                ‘网易’:{},                ‘go…

    编程技术 2025年2月27日
    200
  • python杂记

    os模块说明:python os模块包含普遍的操作系统功能 os.access(path, mode) # 检验权限模式 os.chdir(path) # 改变当前工作目录os.chflags(path, flags) # 设置路径的标记为…

    编程技术 2025年2月27日
    200
  • 详解Python的装饰器

    python中的装饰器是你进入python大门的一道坎,不管你跨不跨过去它都在那里。 为什么需要装饰器 我们假设你的程序实现了say_hello()和say_goodbye()两个函数。 def say_hello():     print…

    编程技术 2025年2月27日
    200
  • Python模块:logging

    很多程序都有记录日志的需求,并且日志中包含的信息即有正常的程序访问日志,还可能有错误、警告等信息输出,python的logging模块提供了标准的日志接口,你可以通过它存储各种格式的日志,logging的日志可以分为 debug、info、…

    2025年2月27日
    100
  • Python网络编程

    认识Socket socket通常也称作”套接字”,用于描述ip地址和端口,是一个通信链的句柄,应用程序通常通过”套接字”向网络发出请求或者应答网络请求。 socket起源于Unix,而Uni…

    2025年2月27日
    200
  • ROS多个master消息互通

    需求 有时候我们需要有几个不同的master, 他们之间要交换topic的内容,这时候就不能使用ros自带的设置同一个master的方法. 我们的处理方法是,构造一个client和一个server,他们运行在不同的master下面, cli…

    编程技术 2025年2月27日
    200
  • Windows版的各种Python库安装包下载地址与安装过程

    在用python开发时(windows环境),会碰到需要安装某个版本的第三方库,为了以后查找、安装方便,总结如下:   windows版的各种Python库安装包下载地址:http://www.lfd.uci.edu/~gohlke/pyt…

    2025年2月27日 编程技术
    200
  • Python内置函数id

    英文文档: id(object) Return the “identity” of an object. This is an integer which is guaranteed to be unique and constant fo…

    编程技术 2025年2月27日
    200

发表回复

登录后才能评论