python爬取豆瓣电影排行榜(requests)的示例代码


Posted in Python onFebruary 18, 2021

'''
  爬取豆瓣电影排行榜
  设计思路:
       1、先获取电影类型的名字以及特有的编号
       2、将编号向ajax发送get请求获取想要的数据
       3、将数据存放进excel表格中
'''

环境部署:

软件安装:

Python 3.7.6

官网地址:https://www.python.org/

安装地址:https://www.python.org/ftp/python/3.7.6/python-3.7.6-amd64.exe

PyCharm 2020.2.2 x64 位

官网地址:https://www.jetbrains.com/pycharm/download/#section=windows

参考教程:https://3water.com/article/197466.htm

模块安装(打开cmd或powershell进行下面的命令安装【前提需要有python】):安装requests模块、lxml模块(发送请求,xpath获取数据)

pip install requests #(主要用来发送请求,获取响应)

pip install lxml #(主要引用里面的etree里面的xpath方法)

安装xpathhelper插件(可以在网页中复制相应的节点xpath路径并查看)

1、下载地址:

链接: https://pan.baidu.com/s/1zfpnrnFtZaxrgqrUX9y5Yg

提取码: fmsu

2、window平台下:
    · 把文件的后缀名crx改为rar,然后解压到同名文件夹中
    · 打开谷歌的扩展程序 ——> 进入到管理管理扩展程序中
    · 打开开发者模式,通过加载已解压的扩展程序,将插件导入
3、ios平台下:
    · 直接将crx文件拖进扩展程序中

安装xlwt模块(将数据存放进excel表格)

pip install xlwt

项目中需要引入的模块:

import requests
from lxml import etree
import xlwt
import time

使用流程:

  • 在列表中填写所需要获取的电影类型名
  • 输入开始时获取的start以及获取多少数据的limit
  • 填写所要输出的excel表格的名字(代码中默认douban.xls)
  • 程序运行结束后打开excel验证数据是否获取
  • 观察自己所需的数据

完整代码:

# encoding=utf8
# 编程者 :Alvin
'''
 爬取豆瓣电影排行榜
 设计思路:
 1、先获取电影类型的名字以及特有的编号
 2、将编号向ajax发送get请求获取想要的数据
 3、将数据存放进excel表格中
'''
import requests
from lxml import etree
import xlwt
import time

class DouBan():
 # 初始化数据,获取最外层的数据
 def __init__(self, name_list):
 self.headers = {
 "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.150 Safari/537.3",
 "Connection": "close",
 "Referer": "https://movie.douban.com/"
 }
 # 获取最外层的数据,并拿到url中的type中的name 和 类型
 self.url = 'https://movie.douban.com/chart'
 self.dydata_list = []
 # 电影的类型名
 self.name_list = name_list
 # 实例化excel表格对象
 self.wb = xlwt.Workbook()


 # 通过电影的类型名字获取对应的类型号
 def get_data_typenum(self, name):
 for data in self.dydata_list:
 if data['name'] == name:
 typenum =data['dytype']
 else:
 continue
 return typenum

 # 获取数据
 def get_data_p1(self):
 response = requests.get(self.url , headers = self.headers)
 # 判断长度是否足够大
 # print(len(response.content.decode()))
 return response.content.decode()

 # 获取下一层的页面数据
 def get_data_p2(self, typenum, num, limit):
 url = 'https://movie.douban.com/j/chart/top_list'
 params = {
 'type': typenum,
 'interval_id': '100:90',
 'action':'',
 'start': num*20,
 'limit': limit
 }
 response = requests.get(url,params=params,headers=self.headers)
 # print(response.json())
 return response.json()

 # 处理数据
 def data_parse_p1(self, data):
 html = etree.HTML(data)
 data_list = html.xpath('//div[@class="types"]/span/a/@href')
 # 用于收集类型名字
 name_list = []
 dytype_list = []
 # 用于收集类型号
 for data in data_list:
 name = data.split('?')[-1].split('&')[0].split('=')[-1]
 dytype = data.split('?')[-1].split('&')[1].split('=')[-1]
 name_list.append(name)
 dytype_list.append(dytype)
 for (name,dytype) in zip(name_list,dytype_list):
 dydict = {}
 dydict['name'] = name
 dydict['dytype'] = dytype
 self.dydata_list.append(dydict)
 # print(self.dydata_list)
 return self.dydata_list

 def data_parse_p2(self, data_list,name):
 print(len(data_list))
 douban = self.wb.add_sheet(name)
 style = xlwt.XFStyle() # 初始化一个style对象,用来保存excel的样式
 font = xlwt.Font() # 创建一个font对象,用来保存对字体进行的操作
 font.name = '微软雅黑' # 字体设置为'微软雅黑'
 font.bold = True # 字体加粗
 al = xlwt.Alignment() # 创建一个对齐对啊想,用来改变文本内容的字体
 style.font = font # 将字体信息保存到style对象中
 style.alignment = al

 # 水平对齐方式、水平居中
 al.horz = 0x02
 # 垂直对齐方式、垂直居中
 al.vert = 0x01

 # 电影的标题
 douban.col(0).width = 256 * 25
 # 电影演员的名字
 douban.col(1).width = 256 * 50
 # 电影上映的年份
 douban.col(2).width = 256 * 15
 # 电影上映的国家
 douban.col(3).width = 256 * 15
 # 电影的标签
 douban.col(4).width = 256 * 20
 # 电影的评分
 douban.col(5).width = 256 * 8
 # 豆瓣中该电影的页面链接
 douban.col(6).width = 256 * 40

 douban.write(0, 0, '电影标题', style)
 douban.write(0, 1, '电影演员名字', style)
 douban.write(0, 2, '电影上映年份', style)
 douban.write(0, 3, '电影上映国家', style)
 douban.write(0, 4, '电影标签', style)
 douban.write(0, 5, '电影评分', style)
 douban.write(0, 6, '豆瓣中该电影的页面链接', style)
 row = 1
 for data in data_list:
 # 电影的标题
 title = data['title']
 # 电影演员的名字
 actors = data['actors']
 # 电影上映的年份
 release_date = data['release_date']
 # 电影上映的国家
 regions = data['regions'][0]
 # 电影的标签
 types = data['types']
 # 电影评分
 score = data['score']
 # 豆瓣查看的链接
 link = data['url']
 douban.write(row, 0, title)
 douban.write(row, 1, actors)
 douban.write(row, 2, release_date)
 douban.write(row, 3, regions)
 douban.write(row, 4, types)
 douban.write(row, 5, score)
 douban.write(row, 6, link)
 row += 1
 self.wb.save('douban.xls')


 # 运行程序
 def run(self, num, limit):
 # 获取第一层中的所需要的类型名字和数字
 self.data_parse_p1(self.get_data_p1())
 for name in self.name_list:
 typenum = self.get_data_typenum(name)
 # 向指定的分类进行数据的访问
 data_list = self.get_data_p2(typenum,num,limit)
 # 对获取的数据进行解析保存
 self.data_parse_p2(data_list,name)


if __name__ == '__main__':
 # 需要查看的类型
 douban = DouBan(['喜剧','悬疑','惊悚'])
 # 需要查看的开始值start,以及需要查看的数量limit
 douban.run(0,100)
 time.sleep(2)

效果图pycharm 运行台

python爬取豆瓣电影排行榜(requests)的示例代码

excel表格显示

python爬取豆瓣电影排行榜(requests)的示例代码

本案例笔者的想法是打算先获取到每一个电影类型的前100个数据,然后在excel表格中进行评分的筛选,最后观察现阶段某个电影类型中哪些电影在豆瓣电影中评分较高的

到此这篇关于python爬取豆瓣电影排行榜(requests)的文章就介绍到这了,更多相关python爬取豆瓣电影内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python实现远程调用MetaSploit的方法
Aug 22 Python
Python中字符串的处理技巧分享
Sep 17 Python
Python 实现一个颜色色值转换的小工具
Dec 06 Python
人生苦短我用python python如何快速入门?
Mar 12 Python
Python常见数字运算操作实例小结
Mar 22 Python
python实现动态创建类的方法分析
Jun 25 Python
numpy数组广播的机制
Jul 12 Python
深入了解Python在HDA中的应用
Sep 05 Python
Python迭代器iterator生成器generator使用解析
Oct 24 Python
python利用opencv实现SIFT特征提取与匹配
Mar 05 Python
python 3.8.3 安装配置图文教程
May 21 Python
Python3如何使用tabulate打印数据
Sep 25 Python
python 爬取腾讯视频评论的实现步骤
Feb 18 #Python
Python之qq自动发消息的示例代码
Feb 18 #Python
Python对excel的基本操作方法
Feb 18 #Python
No module named ‘win32gui‘ 的解决方法(踩坑之旅)
Feb 18 #Python
Python操作Excel的学习笔记
Feb 18 #Python
手把手教你用Django执行原生SQL的方法
Feb 18 #Python
python中封包建立过程实例
Feb 18 #Python
You might like
php设计模式 Chain Of Responsibility (职责链模式)
2011/06/26 PHP
使用PHP破解防盗链图片的一个简单方法
2014/06/07 PHP
PHP实现删除字符串中任何字符的函数
2015/08/11 PHP
PHP中list()函数用法实例简析
2016/01/08 PHP
利用PHP访问带有密码的Redis方法示例
2017/02/09 PHP
jQuery ui1.7 dialog只能弹出一次问题
2009/08/27 Javascript
ASP.NET中使用后端代码注册脚本 生成JQUERY-EASYUI的界面错位的解决方法
2010/06/12 Javascript
Javascript控制页面链接在新窗口打开具体方法
2013/08/16 Javascript
js中arguments,caller,callee,apply的用法小结
2014/01/28 Javascript
JavaScript的React框架中的JSX语法学习入门教程
2016/03/05 Javascript
第六篇Bootstrap表格样式介绍
2016/06/21 Javascript
Javascript this 函数深入详解
2016/12/13 Javascript
js遍历json对象所有key及根据动态key获取值的方法(必看)
2017/03/09 Javascript
vue在使用ECharts时的异步更新和数据加载详解
2017/11/22 Javascript
微信小程序上传图片功能(附后端代码)
2020/06/19 Javascript
jQuery实现炫丽的3d旋转星空效果
2018/07/04 jQuery
在element-ui的el-tree组件中用render函数生成el-button的实例代码
2018/11/05 Javascript
jQuery实现移动端图片上传预览组件的方法分析
2020/05/01 jQuery
jQuery HTML获取内容和属性操作实例分析
2020/05/20 jQuery
使用Python获取CPU、内存和硬盘等windowns系统信息的2个例子
2014/04/15 Python
python实现给微信公众号发送消息的方法
2017/06/30 Python
windows上安装python3教程以及环境变量配置详解
2019/07/18 Python
python实现高斯判别分析算法的例子
2019/12/09 Python
Python数据库封装实现代码示例解析
2020/09/05 Python
python集合的新增元素方法整理
2020/12/07 Python
AP澳洲中文网:澳洲正品直邮,包税收件无忧
2019/07/12 全球购物
怎么可以提高数据库查询数据的速度
2014/06/28 面试题
商务日语专业毕业生求职信
2013/10/26 职场文书
业务主管岗位职责
2013/11/20 职场文书
爱心捐助倡议书
2014/05/19 职场文书
人身损害赔偿协议书范本
2014/09/27 职场文书
2014年文艺部工作总结
2014/11/17 职场文书
服务员岗位职责范本
2015/04/09 职场文书
幼儿园安全工作总结2015
2015/04/20 职场文书
解决Nginx 配置 proxy_pass 后 返回404问题
2021/03/31 Servers
Nginx配置SSL证书出错解决方案
2021/03/31 Servers