专栏首页运维经验分享python爬取豆瓣电影Top250的信息

python爬取豆瓣电影Top250的信息

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

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

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

(可能也没多少人看)

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)

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Pycharm简单使用教程 原

    备注: 刚下载好的pycharm无法运行程序“ Cannot start process, the working directory…”,  两种解决方...

    拓荒者
  • Nginx 配置对流量、连接和请求的限制

      limit_rate开启nginx限速功能,可配置在http、server、location和if in location配置段。 limit_rate 5...

    拓荒者
  • MySQL5.7安装与配置(YUM) 原

    在MySQL官网中下载YUM源rpm安装包:http://dev.mysql.com/downloads/repo/yum/

    拓荒者
  • 三阴性乳腺癌表达矩阵探索笔记之差异性分析

    ==Note== : 第一个基因是随机挑选的,虽然在两个类群中有差异性,但是从图上可以看出,noTNBC 有一部分是被包含在TNBC中的,并不是完全独立分离的关...

    生信技能树
  • JVM之SerialOld收集器

    WindWant
  • 0423作业(函数)

    py3study
  • Django由一查多

    Incredible change happens in your life when you decide to take control of what ...

    小闫同学啊
  • NodeController 源码分析

    在早期的版本中 NodeController 只有一种,v1.16 版本中 NodeController 已经分为了 NodeIpamController 与 ...

    田飞雨
  • frida实战笔记

    frida 是一个十分强大的工具,已经学习它有一段时间了,但也只是零零碎碎的练习与使用。最近在对一个 APP 进行分析的过程中,使用 frida 完成了脱壳、h...

    dengfeng1638205133
  • 讲诉eduSRC挖掘渗透经验

    第一种就是弱口令,很多系统拥有学生或者管理员默认密码或者初始密码,可以通过该方法进入系统进行深度挖掘,毕竟给个登录框也搞不点啥样。

    字节脉搏实验室

扫码关注云+社区

领取腾讯云代金券