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

  • 使用 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. 全球15个顶级技术类博客
  2. Codeforces 1196D RGB Substring
  3. 7z001 002合并 linux,解压小工具-如何把拆分后的压缩包合并(如7z.001)
  4. CSS里:focus-within 的作用和用法
  5. android连接耳机时音量控制,android – 扬声器音量(闹钟)在插入耳机时会降低
  6. 诗与远方:无题(七十)- 小熊熬夜记
  7. redis bio线程任务队列
  8. 【Hadoop Summit Tokyo 2016】一小时之内使用Apache Nifi从零到数据流
  9. [Java] 蓝桥杯ALGO-99 算法训练 薪水计算
  10. 计算机打印不了测试纸,win10系统打印机无法打印测试页的解决办法
  11. 机器学习怎么学?机器学习流程
  12. 超微服务器性能,读取性能强劲 超微2U机架F228服务器评测
  13. DPDK内存管理 ----- (四) rte_mbuf
  14. 使用按键精灵实现界面点击自动化
  15. 安装包时遇到 requires a peer of @angular/core、unmet peer dependency...的问题
  16. 物联网技术如何改变了我们的生活?
  17. 格式化代码_格式化代码是什么意思
  18. 清华EMBA课程系列思考之十六(1) -- 创新与企业转型
  19. 科研丨Overleaf打开LaTeX编译报错:PDF渲染错误【已解决】
  20. HC-SR501人体模块51示例代码

热门文章

  1. 网络型PLC可编程控制/微机接口及微机应用综合实验装置
  2. c语言中文内码,C语言辅导:三种常见的中文内码的转换方法
  3. 更全面的开放能力 HMS Core 5.0重磅亮相华为开发者大会
  4. Sql Server事务+隔离级别+阻塞+死锁
  5. 第十一届中国创新创业大赛浙江赛区暨第九届浙江省“火炬杯”创新创业大赛-新一代信息技术行业总决赛
  6. cad 打开硬件加速卡_绝地求生:如何设置NVIDIA卡使游戏更加流畅高效!及N卡设置原理...
  7. java获取xml子节点_java如何获取XML中子节点的内容
  8. C++的XML编程经验
  9. 清华博士申请退学与教育制度无关?
  10. bed文件格式(转自http://blog.sina.com.cn/s/blog_70b2b6020100liou.html)