Python爬取全球是最大的电影数据库网站IMDb数据
在使用 Python 开发爬虫的过程中,requests 和 BeautifulSoup4(别名bs4) 应用的比较广泛,requests主要用于模拟浏览器的客户端请求,以获取服务器端响应,接收到的响应结果,如:网页HTML源码则交由 bs4 封装后再解析提取目标内容数据。
今天的案例中,我们将使用一个新库 MechanicalSoup 该库事实上是对 requests 和 bs4 的进一步封装,让请求和解析的工作进一步简化,如果你已经熟悉 requests 和 bs4 的基本操作,下面的代码理解起来应该不会很困难。
准备工作 (https://jq.qq.com/?_wv=1027&k=NofUEYzs)
mechanicalsoup 安装
终端下使用 pip 安装即可,也会自动安装相关依赖组件库
pip install mechanicalsoup网页分析 (https://jq.qq.com/?_wv=1027&k=NofUEYzs)
今天我们要请求的是全球是最大的电影数据库网站 IMDb,其官网地址是 http://www.imdb.com 首页显示效果如图所示:

我们要爬取数据的页面,可以通过“Menu“ 导航的子菜单项 "Top Rated Movies" 进入,或直接访问 https://www.imdb.com/chart/top/

我们要采集的目标数据为左侧页面的列表,经过浏览器右键“检查”分析,得知第一条数据项均包含在一个表格行内,此时我们进一步明确要采集的数据为排名、电影标题、发行年份三列,分析得到以下HTML元素:

目标数据均包含在一个td class="titleColumn" 单元格内,此时只需要批量获取有该特征的批量单元格,再取出目标数据并清理即可。
编码实现 (https://jq.qq.com/?_wv=1027&k=NofUEYzs)
采集并打印
初步代码结构:
imdb.py
python答疑 咨询 学习交流群2:660193417###
import mechanical
# 数据容器
data = []
def fetch_data():
    # 此处爬取页面目标数据
def main():
    fetch_data()
if __name__ == "__main__":
    main()重点的代码逻辑是包含在 fetch_data() 函数内,具体代码如下(含注释):
python答疑 咨询 学习交流群2:660193417###
def fetch_data():
    url = "https://www.imdb.com/chart/top/"
    # 构造浏览器对象
    b = mechanicalsoup.StatefulBrowser()
    # 请求目标网址
    b.open(url)
    # b.page 即为当前响应页面源码,且已封装为 BeautifulSoup 对象
    # 页面中找出所有具有 class="titleColumn" 属性的 td 单元格集合
    items = b.page.find_all("td", class_="titleColumn")
    # 遍历所有项
    for item in items:
        # 取出当前单元格中所所有文本,以"\n"分隔为三个元素
        row = item.text.strip().split("\n")
        # 进一步清理元素值的空格
        # 此时列表中三个元素对应为排名、标题、年份
        row = [x.strip() for x in row]
        # 将数据添加至data列表容器,便于进一步处理
        data.append(row)
        # 打印显示
        print(row)此时代码如下:
python答疑 咨询 学习交流群2:660193417###
import mechanicalsoup
data = []
def fetch_data():
    url = "https://www.imdb.com/chart/top/?ref_=nv_mv_250"
    b = mechanicalsoup.StatefulBrowser()
    b.open(url)
    items = b.page.find_all("td", class_="titleColumn")
    for item in items:
        row = item.text.strip().split("\n")
        row = [x.strip() for x in row]
        data.append(row)
        print(row)
def main():
    fetch_data()
if __name__ == "__main__":
    main()此时运行代码 python imdb.py 结果如下:

可以看到在逐行提取时打印的效果,此时数据窗口 data 中也包括了所有行250行的电影信息。
将批量数据写入Excel文件 (https://jq.qq.com/?_wv=1027&k=NofUEYzs)
如果将采集的批量电影数据(250条)一次性写入Excel 表格文件,可以安装使用 Excel 操作库,比如:openpyxl 等,在执行完前述步骤 fetch_data() 执行新建、并写入Excel 操作即可。
Python爬取全球是最大的电影数据库网站IMDb数据的更多相关文章
- 票房和口碑称霸国庆档,用 Python 爬取猫眼评论区看看电影《我和我的家乡》到底有多牛
		今年的国庆档电影市场的表现还是比较强势的,两名主力<我和我的家乡>和<姜子牙>起到了很好的带头作用. <姜子牙>首日破 2 亿,一举刷新由<哪吒之魔童降世&g ... 
- Python爬取中国票房网所有电影片名和演员名字,爬取齐鲁网大陆所有电视剧名称
		爬取CBO中国票房网所有电影片名和演员名字 # -*- coding: utf-8 -*- # 爬取CBO中国票房网所有电影片名 import json import requests import ... 
- Python爬取爱奇艺【老子传奇】评论数据
		# -*- coding: utf-8 -*- import requests import os import csv import time import random base_url = 'h ... 
- 2019-03-20 Python爬取需要登录的有验证码的网站
		当你向验证码发起请求的时候,就有session了,记录下这次session 因为每当你请求一次验证码 或者 请求一次登录首页,验证码都在变动 验证码的链接可能不是固定的,可能需要GET/POST请求, ... 
- python爬取连续一字板股票及当时日期数据【原创分享】
		本篇为个人测试记录,记录爬取连续一字板的股票及当时日期. import tushare as ts import pandas as pd import time # 筛选一字板的策略 def gp_ ... 
- python爬取(自动化)豆瓣电影影评,并存储。
		from selenium import webdriverfrom selenium.webdriver import ActionChainsimport time driver = webdri ... 
- Python爬取全球疫情数据,实现可视化显示地图数据(附代码)
		前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 武汉地区,目前已经实现住院患者清零了,国内疫情已经稳定,然而中国以外新冠确 ... 
- python爬取大众点评并写入mongodb数据库和redis数据库
		抓取大众点评首页左侧信息,如图: 我们要实现把中文名字都存到mongodb,而每个链接存入redis数据库. 因为将数据存到mongodb时每一个信息都会有一个对应的id,那样就方便我们存入redis ... 
- 利用Python爬取豆瓣电影
		目标:使用Python爬取豆瓣电影并保存MongoDB数据库中 我们先来看一下通过浏览器的方式来筛选某些特定的电影: 我们把URL来复制出来分析分析: https://movie.douban.com ... 
随机推荐
- 前端优化建议:合理利用JavaScript的条件运算符
			在最近的项目中要使用到一个格式化文件大小的算法,于是不假思索写了如下代码: function formatSize(size){ if(size<1024){ return size+" ... 
- k8s入门之Deployment(五)
			Deployment控制器通常用来部署无状态的应用,这样可以在任意的节点上扩容或者删除,而不用考虑数据的问题,它可以管理pod对象. 一.多副本 1.使用命令行方式创建Deployment 在dev名 ... 
- zookeeper篇-初识zookeeper
			点赞再看,养成习惯,微信搜索「小大白日志」关注这个搬砖人. 文章不定期同步公众号,还有各种一线大厂面试原题.我的学习系列笔记. 什么是zookeeper? 中间件 作用于分布式系统 支持java.c语 ... 
- XCTF练习题---MISC---快乐游戏题
			XCTF练习题---MISC---快乐游戏题 flag:UNCTF{c783910550de39816d1de0f103b0ae32} 解题步骤: 1.观察题目,下载附件 2.还真是一个游戏,赢了就得 ... 
- Unity实现A*寻路算法学习2.0
			二叉树存储路径节点 1.0中虽然实现了寻路的算法,但是使用List<>来保存节点性能并不够强 寻路算法学习1.0在这里:https://www.cnblogs.com/AlphaIcaru ... 
- centos 7.0 下安装FFmpeg软件 过程
			这几天由于需要编写一个语音识别功能,用到了百度语音识别接口,从web端或小程序端传上来的音频文件是aac或者mp3或者wav格式的,需要使用FFmpeg进行格式转换,以符合百度api的要求. 安装FF ... 
- postman 脚本和变量
			背景 后端接口有登录或鉴权验证,通过 swagger 调用比较费劲,并且 java 的 swagger 库(不够自动化,嵌套类支持需要各种配置才能正常显示 schema)个人感觉也没有 .net co ... 
- 渗透:Nmap
			Nmap,也就是Network Mapper,最早是Linux下的网络扫描和嗅探工具包. nmap是一个网络连接端扫描软件,用来扫描网上电脑开放的网络连接端.确定哪些服务运行在哪些连接端,并且推断计算 ... 
- RealEvo-IDE安装
			双击"InstallWizard.exe"启动安装程序 点击"Install RealEvo-IDE"启动 RealEvo-IDE 安装程序 选择"下 ... 
- APIO刷题
			APIO2010 APIO2010T1 特别行动队 记 \(dp[i]\) 表示划分前 \(i\) 个时的答案,则有 \(dp[i] = max\{ dp[j] + a(sum[i]-sum[j])^ ... 
