豆瓣电影Top250下载并保存到excel文件中

  • 效果图
  • 前言
  • 确定目标网页url
  • 爬取过程
    • 导入相关库
    • 页面内容的获取
  • 页面解析
  • 数据提取
  • 主函数的编写
    • 函数调用
    • 数据存储
  • 完整代码
  • 结语

效果图

话不多说,先上存储为excel文件后的效果图,这里只是简单的将爬取到的数据保存到文件中,没有对表格数据进行标准化处理。因为这涉及到另一个python用来处理表格的库,在这里就不过多的说明,稍后会有相关的文章涉及。

前言

对于豆瓣电影Top250的爬取是相对来说很简单的,尤其是对于新手来说,用该页面来当作爬虫的上手练习项目,是入坑爬虫的首选,很多爬虫初学者都会选择该项目作为入门练习。一直以来,本人都很少用函数式编程的方法来写爬虫代码,总是习惯于用简单的一条线式的编写方式,在这篇文章中采用的是函数式的编程方式。同时也涉及到用python来将数据写入excel表格,初步了解相关的用法。

确定目标网页url

通过查看网页源代码,我们知道该网页数据是静态数据,没有任何反爬机制,这也是前面为什么说作为入门爬虫的很好练手网页。点击鼠标右键,选择查看网页源代码,会弹出该页面的原始HTML代码,这时候我们按住CTRL+F,调出搜索框,搜索我们在浏览器中看到的数据。

再搜索其它电影的名字,同样也能搜索到,因此我们确定该页面就是静态网页,其目标url就是网址栏中的网址,如下图,如此我们就确定了索所要爬取的页面的url。

爬取过程

导入相关库

本次爬取过程中涉及到requests库,用于解析页面数据的lxml中的etree库以及将内容写入到excel文档中的xlwt库。如果没有相关库的朋友需要调出命令行,然后通过pip install 库名的方式进行安装。

import requests
from lxml import etree
import xlwt
#pip install requests
#pip install lxml
#pip install xlwt

页面内容的获取

通过requests库访问目标网页的数据,并确保能够获取到网页内容。

# 获取网页资源
def get_page_source(start_url,headers):response = requests.get(url=start_url,headers = headers)if response.status_code == 200:response.encoding = response.apparent_encodingpage_data = response.textreturn page_dataelse:return "未连接到页面"

页面解析

获取到页面内容后,就是对页面内容进行解析,这里通过lxml库中的etree进行解析,然后用xpath语法进行对数据提取。

# 提取网页电影信息
def page_content(page_data):etree_data = etree.HTML(page_data)selector = etree_data.xpath('//*[@class="article"]/ol/li/div/div[2]')

数据提取

接下来我们就用xpath语法对解析过后的页面进行数据提取,分别提取电影名,评分,评论人数,以及每一部电影的标签或者寄语。

实现代码如下:

    for item in selector:# 电影名称movie_names = item.xpath('./div/a/span[1]/text()')# print(movie_names)# 电影评分movie_scores = item.xpath('./div[2]/div/span[2]/text()')# print(movie_scores)# 电影评论人数movie_numbers = item.xpath('./div[2]/div/span[4]/text()')# print(movie_numbers)# 对电影的描述语quotes = item.xpath('./div[2]/p[2]/span/text()')# print(quotes)# 将每一行获取到的信息添加到一个电影的列表中one_movie_info_list = [movie_names,movie_scores,movie_numbers,quotes]# 将一个电影的列表添加到大的列表中movie_info_list.append(one_movie_info_list)

主函数的编写

函数调用

if __name__ == '__main__':for page in range(0,10):url = 'https://movie.douban.com/top250?start={}&filter='.format(str(page*25))# page += 25headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36'}get_page_source(start_url=url,headers=headers)page_content(get_page_source(start_url=url,headers=headers))

数据存储

     #创建工作簿book = xlwt.Workbook(encoding='utf-8')#创建表单sheet = book.add_sheet('豆瓣排行250')#填写表头head = ['排名','电影名','评分','评价人数','电影寄语']# 写入表头for h in range(len(head)):sheet.write(0,h,head[h])# 排名for index in range(1,251):sheet.write(index,0,index)# 写入相对应的数据j = 1for data in movie_info_list:#从索引为第1行开始写k = 1for d in data:sheet.write(j,k,d)k += 1j += 1#退出工作簿并保存book.save('豆瓣电影Top250.xls')

完整代码

import requests
from lxml import etree
import xlwtmovie_info_list = []
# 获取网页资源
def get_page_source(start_url,headers):response = requests.get(url=start_url,headers = headers)if response.status_code == 200:response.encoding = response.apparent_encodingpage_data = response.textreturn page_dataelse:return "未连接到页面"# 提取网页电影信息
def page_content(page_data):etree_data = etree.HTML(page_data)selector = etree_data.xpath('//*[@class="article"]/ol/li/div/div[2]')# print(selector)for item in selector:# 电影名称movie_names = item.xpath('./div/a/span[1]/text()')# print(movie_names)# 电影评分movie_scores = item.xpath('./div[2]/div/span[2]/text()')# print(movie_scores)# 电影评论人数movie_numbers = item.xpath('./div[2]/div/span[4]/text()')# print(movie_numbers)# 对电影的描述语quotes = item.xpath('./div[2]/p[2]/span/text()')# print(quotes)# 将每一行获取到的信息添加到一个电影的列表中one_movie_info_list = [movie_names,movie_scores,movie_numbers,quotes]# 将一个电影的列表添加到大的列表中movie_info_list.append(one_movie_info_list)if __name__ == '__main__':for page in range(0,10):url = 'https://movie.douban.com/top250?start={}&filter='.format(str(page*25))# page += 25headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36'}t = get_page_source(start_url=url,headers=headers)page_content(t)#创建工作簿book = xlwt.Workbook(encoding='utf-8')#创建表单sheet = book.add_sheet('豆瓣排行250')#填写表头head = ['排名','电影名','评分','评价人数','电影寄语']# 写入表头for h in range(len(head)):sheet.write(0,h,head[h])# 排名for index in range(1,251):sheet.write(index,0,index)# 写入相对应的数据j = 1for data in movie_info_list:#从索引为第1行开始写k = 1for d in data:sheet.write(j,k,d)k += 1j += 1#退出工作簿并保存book.save('豆瓣电影Top250.xls')

结语

在编写过程中难免有需要改进的地方,如有更好的方法,或者有不同见解的地方,欢迎指出。

豆瓣电影Top250信息爬取并保存到excel文件中相关推荐

  1. 利用xpath爬取链家租房房源数据并利用pandas保存到Excel文件中

    我们的需求是利用xpath爬取链家租房房源数据,并将数据通过pandas保存到Excel文件当中 下面我们看一下链家官网的房源信息(以北京为例) 如图所示,我们通过筛选得到北京租房信息 那么我们需要将 ...

  2. python生成大量随机信息,并保存到Excel文件中

    题目要求 生成大量随机信息1000条,(每条信息包括:姓名.性别.年龄.籍贯.电话号码.地址.电子邮件.数学成绩.英语成绩)统计分析数学成绩90分以上的人的性别.年龄.籍贯.尝试将上述随机生成信息写入 ...

  3. python 读取发票内容,在窗口中显示并保存到excel文件中

    编写两个文件ReadPdf.py和QTShow.py ReadPdf.py 1.采用正则表达式re定义提取的字段:(目前只读取这8个字段,开户行及账户在测试中出现问题) self.template_f ...

  4. 电力系统潮流计算matlab仿真,计算结果自动保存到excel文件中

    目录 1.算法仿真效果 2.MATLAB核心程序 3.算法涉及理论知识概要 4.完整MATLAB 1.算法仿真效果 matlab2022a仿真结果如下: 2.MATLAB核心程序 .......... ...

  5. JAVA中将数据保存到EXCEL文件

    java后端将数据库中数据或前端传来的数据保存到EXCEL文件中.代码中有详细注解. 依赖包 <dependency><groupId>org.apache.poi</g ...

  6. python BeautifulSoup爬取豆瓣电影top250信息并写入Excel表格

    豆瓣是一个社区网站,创立于2005年3月6日.该网站以书影音起家,提供关于书籍,电影,音乐等作品信息,其描述和评论都是由用户提供的,是Web2.0网站中具有特色的一个网站. 豆瓣电影top250网址: ...

  7. python爬虫爬取豆瓣电影排行榜并通过pandas保存到Excel文件当中

    我们的需求是利用python爬虫爬取豆瓣电影排行榜数据,并将数据通过pandas保存到Excel文件当中(步骤详细) 我们用到的第三方库如下所示: import requests import pan ...

  8. 请访问豆瓣电影网站,爬取4~10部电影信息(电影名、导 演、演员、海报url链接,预报片视频链接),并结合GUI界面展现电影信息,并可以根据选择的电影名, 下载指定预告片视频到本地并显示预告片。GUI

    请访问豆瓣电影网站,爬取4~10部电影信息(电影名.导 演.演员.海报url链接,预报片视频链接),并结合GUI界面展现电影信息,并可以根据选择的电影名, 下载指定预告片视频到本地并显示预告片.GUI ...

  9. Python豆瓣电影评论的爬取及词云显示

    Python豆瓣电影评论的爬取及词云显示 课程设计论文链接 前言 开发工具.核心库 系统相关技术介绍 系统分析与设计 系统功能模块组成 实现功能和目标 爬取模块设计 爬取过程中下一页的处理 窗口界面设 ...

最新文章

  1. 多晴转云h_晴转多云图标和多云图标的区别 求专业人员解释并给图
  2. [视频教程] 如何在Linux深度系统deepin下安装docker
  3. iBatis resultMap出错 The error happened while setting a property on the result object 解决办法
  4. android自定义属性dimen,android代码里的dimen
  5. C++文件操作的6种方式
  6. 简单理解线程同步上下文
  7. think python 2ed_Think Python 2ed 笔记(二)
  8. wps的计算机在哪里设置密码,wps文件怎么设置和取消密码 wps文件密码设置和取消的步骤方法...
  9. 又一个直播平台走到终点?官网无法访问疑似停服,主播讨要薪资
  10. CCNP路由实验之八 路由重公布
  11. vmware使用技巧
  12. SAP License:更改MM物料基本计量单位
  13. 转:Windows下WSH/JS实现SVN服务器钩子脚本阻止提交空日志信息和垃圾文件
  14. 移动端预览PDF及转成图片保存
  15. 纯平显示器_绿色计算:切换到液晶纯平显示器
  16. 如何群发邮件?群发邮件让发收件人互相不知道?邮箱群发邮件技巧
  17. 六:Consumer订阅流程
  18. Flak——跨域问题解决
  19. redisflush操作
  20. javascript实现图片上传实时显示上传图片

热门文章

  1. 时滞微分方程求解之三ddesd--变时滞
  2. 七堂思维成长课-读后感
  3. MSP430初学:MSP430单片机C语言基础(一)
  4. 迪士尼源码_如何在迪士尼+上禁用自动播放和背景视频
  5. L0 Norm 、L1 Norm 和 L2 Norm 的简单理解
  6. Echarts-----map(单独省级地图)
  7. Java实现背包问题之01背包(是否装满),完全背包
  8. L1-020 帅到没朋友 (20 分)
  9. 古月居ROS暑期学校无人机部分学习笔记
  10. C语言试题111之 s=a+aa+aaa+aaaa+aa...a 的值,其中 a 是一个数字。例如 2+22+222+2222+22222(此时 共有 5 个数相加),几个数相加有键盘控制。