Python爬取猫眼电影100榜并保存到excel表格
时间:2019-10-22
本文章向大家介绍Python爬取猫眼电影100榜并保存到excel表格,主要包括Python爬取猫眼电影100榜并保存到excel表格使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
首先我们前期要导入的第三方类库有;
通过猫眼电影100榜的源码可以看到很有规律 如:
亦或者是:
根据规律我们可以得到非贪婪的正则表达式
"""<div class="movie-item-info">.*?title="(.*?)".*?class="star">(.*?)</p>.*?releasetime">(.*?)</p>"""
之后我们观察网页地址(url)的变化规律:
这是第一页的网址: https://maoyan.com/board/4?offset=0
这是第二页的网址: https://maoyan.com/board/4?offset=10
这是第三页的网址: https://maoyan.com/board/4?offset=20
可以见的网页变化规律为:(当前页数-1)*10 即为:(N-1)*10
之后下面进行爬取
1 from urllib import request 2 import random 3 import time 4 import csv 5 import re 6 import xlwt 7 8 class catEyesMovie: 9 10 def __init__(self): 11 self.url = 'https://maoyan.com/board/4?offset={}' 12 self.ua_list = [ 13 'Win7:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.163 Safari/535.1' 14 ] 15 self.line = 1; 16 #'User-Agent': 'Win7:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.163 Safari/535.1' 17 18 19 #获取网页内容 20 def get_page(self,url): 21 #使用随机的user-agent 22 headers = {'User-Agent':random.choice(self.ua_list)} 23 #创建请求对象 24 req = request.Request(url=url,headers=headers) 25 #发送请求 26 res = request.urlopen(req) 27 #获取相应对象 28 html = res.read().decode('utf-8','ignore') 29 return html 30 31 #清洗数据 32 def clean_page(self,html,xwlt): 33 pattern = re.compile("""<div class="movie-item-info">.*?title="(.*?)".*?class="star">(.*?)</p>.*?releasetime">(.*?)</p>""", re.S) 34 r_list = pattern.findall(html) 35 self.write_page(r_list,xwlt) 36 37 38 #保存内容 39 def write_page(self,r_list,xwlt): 40 one_film_dict = {} 41 for rt in r_list: 42 xwlt.write(self.line,0,rt[0].strip()) 43 xwlt.write(self.line,1,rt[1].strip()) 44 xwlt.write(self.line,2,rt[2].strip()) 45 self.line+=1 46 47 48 49 def main(self,xwlt): 50 #凭借字符串 51 res = [] 52 for i in range(1,11): 53 #拼接url地址 https://maoyan.com/board/4?offset={} 54 #获取当前页数 55 offset = (i-1)*10 56 url = self.url.format(offset) 57 html = self.get_page(url) 58 self.clean_page(html,xwlt) 59 60 61 62 63 64 if __name__ == '__main__': 65 start = time.time() 66 spider = catEyesMovie() 67 #创建一个xlwt对象 68 book = xlwt.Workbook(encoding='utf-8') 69 #创建sheet,Sheet1为表的名字,cell_overwirite_ok为是否覆盖单元格 70 sheet1 = book.add_sheet(u'Sheet1',cell_overwrite_ok=True) 71 #进行第一行标题定义 72 sheet1.write(0,0,'电影名称') 73 sheet1.write(0,1,'主演') 74 sheet1.write(0,2,'上映时间') 75 #进行爬取 76 spider.main(sheet1) 77 book.save('D:\\write.xls') 78 end = time.time() 79 print('执行时间为: %.2f' % (end-start))
每次爬取到的数据结构为:
1 {'电影名称': '速度与激情5', '主演': '速度与激情5', '上映时间': '速度与激情5'} 2 {'电影名称': '驯龙高手', '主演': '驯龙高手', '上映时间': '驯龙高手'} 3 {'电影名称': '勇敢的心', '主演': '勇敢的心', '上映时间': '勇敢的心'} 4 {'电影名称': '闻香识女人', '主演': '闻香识女人', '上映时间': '闻香识女人'} 5 {'电影名称': '神偷奶爸', '主演': '神偷奶爸', '上映时间': '神偷奶爸'}
完成后的excel表格如下:
仅供学习!!
原文地址:https://www.cnblogs.com/gongdada/p/11718473.html
- ASP.NET Core知多少(6):VS Code联调Angular + .NetCore
- 线程安全知多少
- Parallel线程安全问题
- 厚土Go学习笔记 | 25. 函数值 函数是函数也是值
- GoStub框架使用指南
- 厚土Go学习笔记 | 24. map字典测试用例(文字出现次数统计)
- .NET Core+MySql+Nginx 容器化部署
- Trie树分析
- 厚土Go学习笔记 | 23. map字典的使用
- JDK动态代理的底层实现原理
- 冷场了吗?我带着phpcms9.6.2 注入来救场了
- 厚土Go学习笔记 | 22. 实现Pic
- ie8和chrome获取上传图片的宽度和高度等尺寸
- 厚土Go学习笔记 | 21. range用法
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- react-router学习笔记
- 尤大 3 天前发在 GitHub 上的 vue-lit 是啥?
- BFE.dev前端刷题 23. 实现一个sum()方法
- 彻底深刻理解js原型链之prototype,proto以及constructor(一)
- SAP Spartacus取cart的HTTP请求
- 记一次Netty连接池FixedChannelPool连接未释放问题的排查总结
- 神经网络中的蒸馏技术,从Softmax开始说起
- NullInjectorError R3InjectorError(AppModule)[StoreFeatureModule]
- Angular module加载的原理研究
- NullInjectorError No provider for EffectsRootModule!
- Web 中文字体性能优化实践
- Java反射到底慢在哪?不看后悔
- win10 edge 打开闪退问题
- dotnet Open XML 如何判断一份 Office 文档是否被加密
- 【项目实战】ETL 数据导入