前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >python爬取豆瓣电影Top250的信息

python爬取豆瓣电影Top250的信息

作者头像
拓荒者
发布于 2019-03-16 06:52:43
发布于 2019-03-16 06:52:43
61200
代码可运行
举报
文章被收录于专栏:运维经验分享运维经验分享
运行总次数:0
代码可运行

python爬取豆瓣电影Top250的信息。

初学,所以代码的不够美观和精炼。

如果代码有错,请各位读者在评论区评论,以免误导其他同学。

(可能也没多少人看)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import requests
 #从bs4中导入BeautifulSoup模块
 from bs4 import BeautifulSoup
 #获取电影的名称(中文,外文,其他)
 def get_movies_name():
     #定制请求的头部
     headers = {
         "user-agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:61.0) Gecko/20100101 Firefox/61.0",
         "Host":"movie.douban.com"
     }
     movie_chinese_list=[]
     movie_english_list=[]
     movie_other_name_list=[]
     for j in range(0,10):
         i = (25 * j)
         r = requests.get("https://movie.douban.com/top250?start="+str(i)+"&filter=",headers=headers)
         soup=BeautifulSoup(r.text,"html.parser")
         # 两个参数:(标签,标识符)
         div_list=soup.find_all("div",class_="hd")
         for each in div_list:
             #each.a.span只会定位到a标签下的第一个标签的内容
             #each.a.contents会定位到a标签下的每一个标签的内容
             #print(len(each.a.contents))
             #movie_chinese=each.a.span.text.strip()
             #第一个为0.
             movie_chinese=each.a.contents[1].text.strip()
             #strip()除去字符串开头和结尾指定的字符,默认为空格或换行
             movie_english=each.a.contents[3].text.strip()
             movie_english=movie_english[2:]
             #其他名称为第6个内容,但可能存在没有其他名称的电影。
             if len(each.a.contents)>5:
                 movie_other=each.a.contents[5].text.strip()
             movie_other=movie_other[2:]
             movie_chinese_list.append(movie_chinese)
             movie_english_list.append(movie_english)
             movie_other_name_list.append(movie_other)
     return movie_chinese_list,movie_english_list,movie_other_name_list
 #获取电影的导演和主演
 def get_other_contents():
     i=0
     headers = {
         "user-agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:61.0) Gecko/20100101 Firefox/61.0",
         "Host":"movie.douban.com"
     }
     directors_list=[]#导演
     starring_list=[]#主演
     release_date_list=[]#上映年份
     movie_country_list=[]#电影国别
     film_classification_list=[]#电影分类
     for j in range(0, 10):
         i = (25 * j)
         r = requests.get("https://movie.douban.com/top250?start=" + str(i) + "&filter=", headers=headers)
         soup = BeautifulSoup(r.text, "html.parser")
         div_list=soup.find_all("div",class_="bd")
         for each in div_list:
             if len(each.p.contents)>1:
                 """国家,年份,类别"""
                 #对得到的字符串进行处理
                 movie_information=each.p.contents[2].strip()
                 #对字符串通过”/“切片
                 movie_information=movie_information.split("/")
                 #去掉多余的字符。
                 release_date_list.append(movie_information[0].strip("\xa0"))
                 movie_country_list.append(movie_information[1].strip(" "))
                 film_classification_list.append(movie_information[2].strip(" "))
                 """导演,主演"""
                 # 显示p标签下第一部分的全部内容
                 #print(each.p.contents[0].strip())
                 #用"   "对字符串进行分割
                 each_movie = each.p.contents[0].strip().split("   ")
                 director=each_movie[0]
                 #存在有导演,无主演的电影(动画片)
                 if len(each_movie)>1:
                     starring=each_movie[1]
                 #去掉多余字符(导演:)
                 directors_list.append(director.strip("导演:"))
                 # 去掉多余字符(导演:./)
                 starring_list.append(starring.strip("主演:").strip(".").strip("/"))
     return directors_list,starring_list,release_date_list,movie_country_list,film_classification_list
 #获取电影评分和经典影评
 def get_movie_score():
     headers = {
         "user-agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:61.0) Gecko/20100101 Firefox/61.0",
         "Host":"movie.douban.com"
     }
     movie_score_list = []#评分
     movie_review_list = []#经典影评
     for j in range(0, 10):
         i = (25 * j)
         r = requests.get("https://movie.douban.com/top250?start=" + str(i) + "&filter=", headers=headers)
         soup = BeautifulSoup(r.text, "html.parser")
         div_list_1=soup.find_all("div",class_="star")
         div_list_2 = soup.find_all("p", class_="quote")
         for each_1 in div_list_1:
             #通过contents把代码转化成列表.
             #通过text提取关键字
             movie_score=each_1.contents[3].text
             movie_score_list.append(movie_score)
         for each_2 in div_list_2:
             #通过contents把代码转化成列表.
             #通过text提取关键字
             #列表中只有一个元素
             movie_review=each_2.text
             movie_review_list.append(movie_review.strip())
     return movie_review_list,movie_score_list
 (movie_chinese_list,movie_english_list,movie_other_name_list)=get_movies_name()
 print("豆瓣电影Top250中文电影名:(共%d个电影)"%len(movie_chinese_list))
 print(movie_chinese_list)
 print("豆瓣电影Top250外文电影名:(共%d个电影)"%len(movie_english_list))
 print(movie_english_list)
 print("豆瓣电影Top250其他电影名:(共%d个电影)"%len(movie_other_name_list))
 print(movie_other_name_list)
 
 (directors_list,starring_list,release_date_list,movie_country_list,film_classification_list)=get_other_contents()
 print("导演:")
 print(directors_list)
 print("主演:")
 print(starring_list)
 print("年份:")
 print(release_date_list)
 print("国家:")
 print(movie_country_list)
 print("类别:")
 print(film_classification_list)
 
 (movie_review_list,movie_score_list)=get_movie_score()
 print("评分:")
 print(movie_score_list)
 print("经典影评:")
 print(movie_review_list)
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018/12/10 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
java消息队列基础和RabbitMQ相关概念
在使用RabbitMQ的时候,作为消息发送方希望杜绝任何消息丢失或者投递失败场景。RabbitMQ为我们提供了两种方式用来控制消息的投递可靠性模式。
终有救赎
2023/10/16
2540
java消息队列基础和RabbitMQ相关概念
分布式--RabbitMQ集成SpringBoot、消息可靠性、死信队列、延迟交换机、集群
SpringBoot中使用RabbitTemplate自动注入,即可发送消息,并对方法都进行了封装
aruba
2022/09/19
6050
分布式--RabbitMQ集成SpringBoot、消息可靠性、死信队列、延迟交换机、集群
RabbitMQ:第二章:Spring整合RabbitMQ(简单模式,广播模式,路由模式,通配符模式,消息可靠性投递,防止消息丢失,TTL,死信队列,延迟队列,消息积压,消息幂等性)
RabbitMQ:第二章:Spring整合RabbitMQ(简单模式,广播模式,路由模式,通配符模式,消息可靠性投递,防止消息丢失,TTL,死信队列,延迟队列,消息积压,消息幂等性)
Java廖志伟
2022/03/07
7600
RabbitMQ:第二章:Spring整合RabbitMQ(简单模式,广播模式,路由模式,通配符模式,消息可靠性投递,防止消息丢失,TTL,死信队列,延迟队列,消息积压,消息幂等性)
RabbitMQ的死信队列
RabbitMQ的死信队列(Dead Letter Queue,简称DLQ)是一种用于处理消息失败或无法路由的消息的机制。在RabbitMQ中,当消息出现以下情况时,它可能会被标记为死信:
会洗碗的CV工程师
2024/05/03
1K0
RabbitMQ的死信队列
高性能消息队列中间件MQ
MQ全称Message Queue(消息队列),是在消息的传输过程中保 存消息的容器。多用于系统之间的异步通信 同步通信相当于两个人当面对话,你一言我一语。必须及时回复。
天天Lotay
2023/02/16
6090
高性能消息队列中间件MQ
RabbitMQ死信队列在SpringBoot中的使用
nack()与reject()的区别是:reject()不支持批量拒绝,而nack()可以.
喜欢天文的pony站长
2020/06/26
1.5K0
RabbitMQ---延迟队列,整合springboot
延时队列,队列内部是有序的,最重要的特性就体现在它的延时属性上,延时队列中的元素是希望在指定时间到了以后或之前取出和处理,简单来说,延时队列就是用来存放需要在指定时间被处理的元素的队列。
大忽悠爱学习
2021/12/07
6630
RabbitMQ---延迟队列,整合springboot
RabbitMQ高级特性:死信队列
死信队列,英文缩写DLX,Dead Letter Exchange(死信交换机),当消息成为Dead message(消息过期)后,可以被重新发送到另一个交换机,这个交换机就算是DLX,其实死信交换机(队列)和正常交换机(队列)没有什么区别
科技新语
2023/04/07
2.7K0
【云原生进阶之PaaS中间件】第四章RabbitMQ-4.1-原理机制与进阶特性
4.客户端使用Routing key,在Exchange和Queue之间建立好绑定关系。
江中散人_Jun
2024/02/20
3490
【云原生进阶之PaaS中间件】第四章RabbitMQ-4.1-原理机制与进阶特性
【Rabbitmq篇】高级特性----TTL,死信队列,延迟队列
目前有俩种方式可以设置消息的TTL 一是设置队列的TTL,队列中所有消息都有相同的过期时间.
用户11369558
2024/11/25
4790
【Rabbitmq篇】高级特性----TTL,死信队列,延迟队列
分布式专题|因为不知道Rabbit如何实现延时队列,我最终还是没能进入大厂
学过rabbitmq的同学应该都知道,rabbitmq是没有延时队列功能的,为什么面试官还会问这个奇葩的问题呢?
AI码师
2020/11/19
4070
分布式专题|因为不知道Rabbit如何实现延时队列,我最终还是没能进入大厂
Rabbit 高级操作
过期时间TTL表示可以对消息设置预期的时间,在这个时间内都可以被消费者接收获取;过了时间之后消息将自动被删除。
张小驰出没
2021/12/06
3960
Rabbit 高级操作
浅析RabbitMQ的延迟队列
这些场景都有一个特点,需要在某个事件发生之后或者之前的指定时间点完成某一项任务,如:发生订单生成事件,在十分钟之后检查该
小熊学Java
2023/07/16
4090
浅析RabbitMQ的延迟队列
RibbitMQ学习笔记延迟队列
延时队列,队列内部是有序的,最重要的特性就体现在它的延时属性上,延时队列中的元素是希望在指定时间到了以后或之前取出和处理,简单来说,延时队列就是用来存放需要在指定时间被处理的元素的队列。
默 语
2024/11/20
770
RibbitMQ学习笔记延迟队列
RabbitMQ消息队列入门及解决常见问题
两种方式各有优劣,打电话可以立即得到响应,但是你却不能跟多个人同时通话。发送邮件可以同时与多个人收发邮件,但是往往响应会有延迟。
不吃紫菜
2023/02/13
2.2K0
RabbitMQ消息队列入门及解决常见问题
【SpringBoot】SpringBoot整合RabbitMQ消息中间件,实现延迟队列和死信队列
死信队列的工作模式 今天我要实现的就是这个延迟队列和死信队列。生产者首先向延迟队列发送消息,待达到TTL后消息会被转送到死信队列当中,消费者会从死信队列中获取消息进行消费。
哈__
2024/06/09
4710
【SpringBoot】SpringBoot整合RabbitMQ消息中间件,实现延迟队列和死信队列
近九万字的RabbitMQ图文详解
RabbitMQ 简介:RabbitMQ 基于 AMQP 标准,采用 Erlang 语言开发的消息中间件。
Java廖志伟
2022/03/07
1.1K0
近九万字的RabbitMQ图文详解
【消息中间件】异常和死信消息们的浪浪山
新建项目rabbitmqdemo02,新建模块producer-springboot
半旧518
2023/10/17
2980
【消息中间件】异常和死信消息们的浪浪山
15-RabbitMQ高级特性-死信队列
死信队列,英文缩写:DLX 。Dead Letter Exchange(死信交换机),当消息成为Dead message后,可以被重新发送到另一个交换机,这个交换机就是DLX。
Devops海洋的渔夫
2023/02/10
1K0
15-RabbitMQ高级特性-死信队列
RabbitMQ延迟队列
但RabbitMQ中并未提供延迟队列功能,我们可以使用死信队列实现延迟队列的效果。
会洗碗的CV工程师
2024/05/04
1920
RabbitMQ延迟队列
推荐阅读
相关推荐
java消息队列基础和RabbitMQ相关概念
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验