爬取目标

本文将提取猫眼电影 TOP100 排行榜的电影名称、时间、评分、图片等信息,URL 为http://maoyan.com/board/4,提取的结果我们以 excel 格式保存下来。

准备工作

保证电脑安装了 python3.6 和已经安装好了 requests 库、beautifulsoup 库和 openpyxl 库。
前期安装步骤可以参考:https://germey.gitbooks.io/python3webspider/1-%E5%BC%80%E5%8F%91%E7%8E%AF%E5%A2%83%E9%85%8D%E7%BD%AE.html

爬取分析

打开http://maoyan.com/board/4我们会发现榜单主要显示 4 个数据:电影名、主演、上映时间和评分。
如图所示:

网页下滑到最下方可以发现有分页的列表,我们点击一下第二页会发现页面的 URL 变成了http://maoyan.com/board/4?offset=10,比之前的页面多了一个 offset=10 的参数,而且页面显示的是排行 11-20 名的电影。

由此我们可以总结出规律,offset 代表了一个偏移量值,如果偏移量为 n,则显示的电影序号就是 n+1 到 n+10,每页显示 10 个。所以我们如果想获取 TOP100 电影,只需要分开请求 10 次,而 10 次的 offset 参数设置为 0,10,20,…,90 即可,这样我们获取不同的页面结果之后再用正则表达式提取出相关信息就可以得到 TOP100 的所有电影信息了。

抓取首页

import requestsdef get_one_page(url):response = requests.get(url)if response.status_code == 200:return response.textreturn Nonedef main():url = 'http://maoyan.com/board/4'html = get_one_page(url)print(html)main()

这样我们就可以获取首页的源代码了,获取源代码之后我们要对页面进行解析,提取出我们想要的信息。

使用 BeautifulSoup 进行提取

接下来我们回到网页看一下页面的真实源码,在开发者工具中 Network 监听(建议使用谷歌浏览器,按 F12 即可查看网页信息),然后查看一下源代码。如图所示:

注意这里不要在 Elements 选项卡直接查看源码,此处的源码可能经过 JavaScript 的操作而和原始请求的不同,我们需要从Network选项卡部分查看原始请求得到的源码。

查看其中的一条源代码如图所示:
可以看到电影名、主演、上映时间和评分分别在属性 class=”name”、class=”star”、class=”release” 和 class=”score”的文本中
那么我们可以用 BeautifulSoup 的方法进行提取:

def parse_one_page(html):soup = bs4.BeautifulSoup(html, 'lxml')# 获取电影名movies = []targets = soup.find_all(class_='name')for each in targets:movies.append(each.get_text())# 获取评分scores = []targets = soup.find_all(class_='score')for each in targets:scores.append(each.get_text())# 获取主演信息star_message = []targets = soup.find_all(class_='star')for each in targets:star_message.append(each.get_text().split('\n')[1].strip())print(each.get_text().split('\n')[1].strip())# 获取上映时间play_time = []targets = soup.find_all(class_='releasetime')for each in targets:play_time.append(each.get_text())result = []length = len(movies)for j in range(length):result.append([movies[j], scores[j], star_message[j], play_time[j]])return result

这样我们就成功的将一页的 10 个电影信息都提取出来了

写入文件

随后我们将提取的结果做成 excel 表格形式

def save_to_excel(result):wb = openpyxl.Workbook()ws = wb.activews['A1'] = '电影名称'ws['B1'] = '评分'ws['C1'] = '主演'ws['D1'] = '上映时间'for item in result:ws.append(item)wb.save('猫眼电影TOP100.xlsx')

分页爬取

但我们需要爬取的数据是 TOP100 的电影,所以我们还需要遍历一下给这个链接传入一个 offset 参数,实现其他 90 部电影的爬取

for i in range(10):headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.116 Safari/537.36',}url = 'http://maoyan.com/board/4?offset=' + str(i * 10)html = get_one_page(url, headers)result.extend(parse_one_page(html))

整合代码

到此为止,我们的猫眼电影 TOP100 的爬虫就全部完成了,再稍微整理一下,完整的代码如下:

import requests
import bs4
from requests.exceptions import RequestException
import openpyxldef get_one_page(url, headers):try:response = requests.get(url, headers=headers)if response.status_code == 200:return response.textreturn Noneexcept RequestException:return Nonedef parse_one_page(html):soup = bs4.BeautifulSoup(html, 'lxml')# 获取电影名movies = []targets = soup.find_all(class_='name')for each in targets:movies.append(each.get_text())# 获取评分scores = []targets = soup.find_all(class_='score')for each in targets:scores.append(each.get_text())# 获取主演信息star_message = []targets = soup.find_all(class_='star')for each in targets:star_message.append(each.get_text().split('\n')[1].strip())print(each.get_text().split('\n')[1].strip())# 获取上映时间play_time = []targets = soup.find_all(class_='releasetime')for each in targets:play_time.append(each.get_text())result = []length = len(movies)for j in range(length):result.append([movies[j], scores[j], star_message[j], play_time[j]])return resultdef save_to_excel(result):wb = openpyxl.Workbook()ws = wb.activews['A1'] = '电影名称'ws['B1'] = '评分'ws['C1'] = '主演'ws['D1'] = '上映时间'for item in result:ws.append(item)wb.save('猫眼电影TOP100.xlsx')def main():result = []for i in range(10):headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.116 Safari/537.36',}url = 'http://maoyan.com/board/4?offset=' + str(i * 10)html = get_one_page(url, headers)result.extend(parse_one_page(html))save_to_excel(result)if __name__ == '__main__':main()

运行结果如下图:

结语

本文参考崔庆才的《Python3 网络爬虫开发实战》代码部分将正则表达式解析换成 BeautifulSoup 解析。
本代码还有改进的地方,比如解析代码时有些代码重复了,使用的单进程爬取速度较慢,最近 requests 的作者新开发了一个库 request-html,集网页获取与解析与一体,使爬取更简单。有兴趣的可以看看官方文档传送门。希望大家多多交流。

爬取猫眼 TOP100 电影并以 excel 格式存储相关推荐

  1. python爬虫练习--爬取猫眼top100电影信息

    #! /usr/bin/env python # coding: utf-8 #环境要求:python3 #抓取猫眼电影top100 ''' 抓取的目标网站为:http://maoyan.com/bo ...

  2. python爬取猫眼top100电影,经典永远是经典

    想必大家在无聊的时候,都想找一部口碑的好电影,而自己又没看过的,这个其实可以参考猫眼top100的上排名,因为排名是靠评分升上去,想排名第一的<霸王别姬>,"哥哥"在里 ...

  3. 爬取猫眼TOP100电影

    import json import re import requests from requests import RequestException from multiprocessing imp ...

  4. Jupyter notebook爬取猫眼top100电影信息(Xpath)

    文章目录 Jupyter notebook 简介 代码 Jupyter notebook 简介 基于网页交互式运算的应用程序,可以在网页上编写和执行代码.本文将使用Xpath方法获取信息. 代码 导入 ...

  5. python爬虫:爬取猫眼TOP100榜的100部高分经典电影

    1.问题描述: 爬取猫眼TOP100榜的100部高分经典电影,并将数据存储到CSV文件中 2.思路分析: (1)目标网址:http://maoyan.com/board/4 (2)代码结构: (3) ...

  6. python 爬取豆瓣top100电影页面

    python 爬取豆瓣top100电影页面 运行结果截图: 代码: (原网站:https://movie.douban.com/top250) 1.将页面保存 避免多次访问 (登陆状态需页面cooki ...

  7. 爬取中国大学排名并以csv格式存储

    爬取中国大学排名并以csv格式存储 import requests from bs4 import BeautifulSoup import bs4def get_content(url):try:u ...

  8. 爬取猫眼top100并存入csv文件中

    使用python爬虫爬取猫眼电影top100 import requests import re import csvif __name__=="__main__":headers ...

  9. 爬取猫眼top100的电影图片,名称,时间,评分等信息

    一.准备工作 1.安装python 首先,下载Python3,这里使用Python3.7.1版本,64位. 地址链接:https://www.python.org/downloads/ 双击打开,进行 ...

最新文章

  1. maven 插件:Tomcat7
  2. 构建Chua 混沌电路 - 基本测试
  3. Django用来作为爬虫框架浅谈
  4. mysql 数据库 限制大小_MySQL数据库表各种大小限制小结
  5. 以太坊智能合约简介(Solidity)
  6. 带负荷测试要求二次最小电流_检修状态下二次带负荷测试方案的优化研究
  7. 操作多个表_2_组合相关的行
  8. java中,如何实现输入一个正整数,并将这个数字反转输出,比如输入123,输出321
  9. 如何批量查询PR值、百度权重、百度快照及收录量,用BlueCatTools批量网站查询工具
  10. Html 5/CSS 的学习(二) —— Bootstrap 导航栏
  11. [Azure][PowerShell][ASM][04]Storage
  12. MySQL(6)-----数据类型
  13. 无法找到音频输入输出设备
  14. ntfs格式的移动硬盘如何在mac电脑写入?
  15. 安卓如何调出软键盘_Android软键盘显示模式及打开和关闭方式(推荐)
  16. VS2010向工具箱中添加控件解决 Microsoft Communications Control,未能实例化 设计时授权
  17. arm linux源更新,[Linux] - Manjaro ARM 系统配置(更新镜像源,安装 Docker 和 Dotnet Core)...
  18. git基本命令与git基本命令-远程
  19. rust月球服务器名字_月亮的十大未解之谜
  20. 帝国cms e loop php,帝国CMS灵动标签e:loop的使用 标签循环

热门文章

  1. vue3中全局导入bootstrap-icons
  2. 云计算虚拟化与云平台如何对接安可领域?
  3. Go-cli框架Cobra
  4. 生活记录-word里公式和文字高低不齐
  5. Anaconda-tensorflow-keras安装方法学习
  6. 数据分析---论文种类分类
  7. PointPillars 工程复现
  8. UBUNTU 18.04开机自启动脚本实现--打开终端、执行命令及终端输入文字
  9. 移动端常见的开发布局方式
  10. pandas系列学习(六):数据聚合