该项目大致分为以下步骤:

  • 使用 requests库 获取页面
  • 使用 lxml库 和 XPath 解析页面
  • 爬取电影海报图片
  • 使用 pandas库 将电影的相关信息存储为csv文件
  • 添加循环,保存所有图片以及相关信息

首先,我们构建一个框架来获取豆瓣电影的HTML页面:

import requestsdef get_html(url):"""获取HTML页面Parameters----------url : stringURL链接Returns-------HTMLHTML页面"""headers = {'User-Agent':"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36"}try:html = requests.get(url, headers=headers)html.encoding = html.apparent_encodingif html.status_code == 200:print("获取HTML页面成功!")except Exception as e:print("获取HTML页面失败,原因是:%s" % e)return html.textif __name__ == '__main__':url = "https://movie.douban.com/top250"html = get_html(url)

接下来,我们分析一下豆瓣电影的网页:

使用开发者工具(F12),经过分析,可以发现每一页的电影信息都是这些li标签:

我们用 XPath Helper 获取这些li标签:

在刚才获取的li标签下继续分析电影相关信息:

首先是电影名字:

接下来是导演主演信息:

然后是年份、国家和电影类型:

接下来是电影评分:

然后是评价人数:

接下来是简介:

(这里发现Top 247的那部电影没有简介,所以后面需要处理一下)

最后是电影海报图片:


分析完页面之后,我们写一下解析页面的函数:

from lxml import etree # 解析HTML页面def parse_html(html):"""解析HTML页面Parameters----------html : HTML爬取的HTML页面Returns-------movies : list电影信息imgurls : list电影海报图片"""movies = [] # 存储电影的相关信息imgurls = [] # 存储电影海报图片html = etree.HTML(html)lis = html.xpath("//ol[@class='grid_view']/li") # XPath返回列表对象# 提取每一部电影的相关信息for li in lis:# 下面的XPath路径前面都要加上. 表示从li这个节点开始name = li.xpath(".//a/span[@class='title'][1]/text()")[0] # 获取到的列表第0个元素才是电影名字director_actor = li.xpath(".//div[@class='bd']/p/text()[1]")[0].replace(' ','').replace('\n','').replace('/','').replace('\xa0', '') # 去除字符串中的多余字符info = li.xpath(".//div[@class='bd']/p/text()[2]")[0].replace(' ','').replace('\n','').replace('\xa0', '') # 去除字符串中的多余字符rating_score = li.xpath(".//span[@class='rating_num']/text()")[0]rating_num = li.xpath(".//div[@class='star']/span[4]/text()")[0]introduce = li.xpath(".//p[@class='quote']/span/text()")# 把提取的相关信息存入movie字典,顺便处理Top 247那部电影没有introduce的情况if introduce:movie = {'name': name, 'director_actor': director_actor, 'info': info, 'rating_score': rating_score,'rating_num': rating_num, 'introduce': introduce[0]}else:movie = {'name': name, 'director_actor': director_actor, 'info': info, 'rating_score': rating_score,'rating_num': rating_num, 'introduce': None}movies.append(movie)imgurl = li.xpath(".//img/@src")[0] # 提取图片URL  imgurls.append(imgurl)return movies, imgurlsif __name__ == '__main__':url = 'https://movie.douban.com/top250'html = get_html(url)movies = parse_html(html)[0]imgurls = parse_html(html)[1]

测试时发现 director_actor 和 info 有 \xa0不间断空白符:

用.replace(’\xa0’, ‘’)语句去除。


接下来编写保存电影海报图片的函数:

import osdef download_img(url, movie):"""保存海报图片Parameters----------url : string图片文件链接movie : dict电影信息Returns-------None."""if 'movieposter' in os.listdir(r'S:\DouBan'):passelse:os.mkdir('movieposter')os.chdir(r'S:\DouBan\movieposter')img = requests.get(url).content # 返回的是bytes型也就是二进制的数据with open(movie['name'] + '.jpg', 'wb') as f:f.write(img)

最后添加循环,爬取所有电影的海报图片以及相关信息:

每一页有25部电影,一共十页:

每一页的URL通过以下方式决定:

import pandas as pdif __name__ == '__main__':MOVIES = []IMGURLS = []for i in range(10):url = "https://movie.douban.com/top250?start=" + str(i*25) + "&filter="html = get_html(url)movies = parse_html(html)[0]imgurls = parse_html(html)[1]MOVIES.extend(movies)IMGURLS.extend(imgurls)for i in range(250):download_img(IMGURLS[i], MOVIES[i])print("正在下载第" + str(i+1) + "张图片……")os.chdir(r'S:\DouBan') # 记得把路径换回来moviedata = pd.DataFrame(MOVIES) # 把电影相关信息转换为DataFrame数据格式moviedata.to_csv('movie.csv')print("电影相关信息存储成功!")

运行代码:

至此,该项目就完成了。

完整源代码

爬取豆瓣电影Top 250的海报图片以及相关信息相关推荐

  1. 豆瓣电影Top 250排行榜海报图片下载

    1 需求 豆瓣电影Top 250排行榜海报图片下载,并实现持续化存储. 2 代码实现 import re import requests# 获取网页源代码 headers = {'User-Agent ...

  2. 【Python爬虫】爬取豆瓣电影Top 250

    豆瓣电影 Top 250 导入第三方包 urllib模块介绍 引入模块 import urllib.request,urllib.parse,urllib.error 获取一个get请求 respos ...

  3. 使用Python爬取豆瓣电影 Top 250

    目录 前言 一.大致思路 1.导入第三方库 2.简单需求分析 二.代码解析 三.代码实现 四.总结一下 实现Python爬虫的基本思路: 1. 确定需求 2. 网站分析 3. 单一数据提取 4. 提取 ...

  4. 爬虫练习-爬取豆瓣电影 Top 250信息并存储于本地

    文章目录 思路 使用环境 一.请求网页 二.解析网页 三.获取信息 四.实现翻页 附录 A.所得数据截图 B.完整代码 思路 请求网页 翻页 开始 解析电影Top250页面 获取信息 使用环境 pyt ...

  5. 不会 Python 没关系,手把手教你用 web scraper 抓取豆瓣电影 top 250 和 b 站排行榜

    苏生不惑第190 篇原创文章,将本公众号设为 星标 ,第一时间看最新文章. 关于Python之前分享过很多文章了: Python 抓取知乎电影话题下万千网友推荐的电影,这个国庆节不愁没电影看了 王菲k ...

  6. 爬虫系列1:Requests+Xpath 爬取豆瓣电影TOP

    爬虫1:Requests+Xpath 爬取豆瓣电影TOP [抓取]:参考前文 爬虫系列1:https://www.cnblogs.com/yizhiamumu/p/9451093.html [分页]: ...

  7. 不会 Python 没关系,手把手教你用 web scraper 抓取豆瓣电影 top 250 和 b 站排行榜...

    苏生不惑第190 篇原创文章,将本公众号设为星标,第一时间看最新文章. 关于Python之前分享过很多文章了: Python 抓取知乎电影话题下万千网友推荐的电影,这个国庆节不愁没电影看了 王菲k歌又 ...

  8. 不会写Python代码如何抓取豆瓣电影 Top 250

    说到爬虫,大多数人会想到用Python来做,毕竟简单好用,比如想抓取豆瓣电影top250 的所有电影数据. 简单的代码如下: import requests from bs4 import Beaut ...

  9. python xpath爬取豆瓣图书Top 250存入csv文件并解决csv乱码问题

    我上次分享过关于爬取豆瓣电影top250的实战:BeautifulSoup爬取豆瓣电影top250信息 和 python BeautifulSoup爬取豆瓣电影top250信息并写入Excel表格 , ...

最新文章

  1. 2017暑假 第四周 学习总结(复习)
  2. 疫情过后,2020年各省市GDP排行榜top10新鲜出炉,你的家乡排在第几?
  3. android 退出应用没有走ondestory方法,Android退出应用最优雅的方式(改进版)
  4. Xcode的简单使用
  5. 给 JDK 官方提了一个 Bug,结果...
  6. 3个检测浏览器User-Agent信息的网站
  7. dj鲜生-34-存档-用户中心地址页重复查询默认地址的优化-利用自定义模型管理器的方法来实现
  8. 一些有关系统APK的探索(一)
  9. 项目安装使用uuid_在uniapp中使用fingerprint2实现游客设备标识
  10. python 练习 27
  11. 深入理解C#的装箱和拆箱
  12. 站在巨人的肩膀上看Servlet——原来如此(更适合初学者认识Servlet)
  13. 现代控制理论——状态、状态空间、状态空间描述
  14. AutoPatch java_EBS开发技术之Patch安装
  15. Voxel RCNN:高性能3D目标检测网络(AAAI2021)
  16. css中div怎么飞翔
  17. Vue 接入腾讯云【实时音视频】TRTC
  18. 微软MPP2.0 Microsoft Pen Protocol V2.0 officialEEAP.pdf
  19. 苹果微信多开_怎样才能下载两个微信
  20. TYPEC 接口芯片CC逻辑原理与必要性

热门文章

  1. T3/T6 出纳 年结及反年结操作
  2. 【BZOJ1875/SDOI2009】HH去散步
  3. 视频教程-STM32标准库的引入视频课程-第3季第6部分-单片机/工控
  4. 朗强科技:HDMI信号分配传输器的功能与使用
  5. html图片右上角加上角标
  6. bootice添加黑苹果引导_OpenCore引导安装黑苹果卡代码解决方法(内容较多)
  7. CSP2019入门级第一轮-排列组合题
  8. 手机 android 系统 升级失败,谷歌再次放出大招!让安卓11系统从此不再变砖:强制无缝升级系统...
  9. 手机忘记密码的解决方法
  10. 为什么3D游戏建模师就业要求越来越高的原因