爬取豆瓣电影Top 250的海报图片以及相关信息
该项目大致分为以下步骤:
- 使用 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的海报图片以及相关信息相关推荐
- 豆瓣电影Top 250排行榜海报图片下载
1 需求 豆瓣电影Top 250排行榜海报图片下载,并实现持续化存储. 2 代码实现 import re import requests# 获取网页源代码 headers = {'User-Agent ...
- 【Python爬虫】爬取豆瓣电影Top 250
豆瓣电影 Top 250 导入第三方包 urllib模块介绍 引入模块 import urllib.request,urllib.parse,urllib.error 获取一个get请求 respos ...
- 使用Python爬取豆瓣电影 Top 250
目录 前言 一.大致思路 1.导入第三方库 2.简单需求分析 二.代码解析 三.代码实现 四.总结一下 实现Python爬虫的基本思路: 1. 确定需求 2. 网站分析 3. 单一数据提取 4. 提取 ...
- 爬虫练习-爬取豆瓣电影 Top 250信息并存储于本地
文章目录 思路 使用环境 一.请求网页 二.解析网页 三.获取信息 四.实现翻页 附录 A.所得数据截图 B.完整代码 思路 请求网页 翻页 开始 解析电影Top250页面 获取信息 使用环境 pyt ...
- 不会 Python 没关系,手把手教你用 web scraper 抓取豆瓣电影 top 250 和 b 站排行榜
苏生不惑第190 篇原创文章,将本公众号设为 星标 ,第一时间看最新文章. 关于Python之前分享过很多文章了: Python 抓取知乎电影话题下万千网友推荐的电影,这个国庆节不愁没电影看了 王菲k ...
- 爬虫系列1:Requests+Xpath 爬取豆瓣电影TOP
爬虫1:Requests+Xpath 爬取豆瓣电影TOP [抓取]:参考前文 爬虫系列1:https://www.cnblogs.com/yizhiamumu/p/9451093.html [分页]: ...
- 不会 Python 没关系,手把手教你用 web scraper 抓取豆瓣电影 top 250 和 b 站排行榜...
苏生不惑第190 篇原创文章,将本公众号设为星标,第一时间看最新文章. 关于Python之前分享过很多文章了: Python 抓取知乎电影话题下万千网友推荐的电影,这个国庆节不愁没电影看了 王菲k歌又 ...
- 不会写Python代码如何抓取豆瓣电影 Top 250
说到爬虫,大多数人会想到用Python来做,毕竟简单好用,比如想抓取豆瓣电影top250 的所有电影数据. 简单的代码如下: import requests from bs4 import Beaut ...
- python xpath爬取豆瓣图书Top 250存入csv文件并解决csv乱码问题
我上次分享过关于爬取豆瓣电影top250的实战:BeautifulSoup爬取豆瓣电影top250信息 和 python BeautifulSoup爬取豆瓣电影top250信息并写入Excel表格 , ...
最新文章
- 全球15个顶级技术类博客
- Codeforces 1196D RGB Substring
- 7z001 002合并 linux,解压小工具-如何把拆分后的压缩包合并(如7z.001)
- CSS里:focus-within 的作用和用法
- android连接耳机时音量控制,android – 扬声器音量(闹钟)在插入耳机时会降低
- 诗与远方:无题(七十)- 小熊熬夜记
- redis bio线程任务队列
- 【Hadoop Summit Tokyo 2016】一小时之内使用Apache Nifi从零到数据流
- [Java] 蓝桥杯ALGO-99 算法训练 薪水计算
- 计算机打印不了测试纸,win10系统打印机无法打印测试页的解决办法
- 机器学习怎么学?机器学习流程
- 超微服务器性能,读取性能强劲 超微2U机架F228服务器评测
- DPDK内存管理 ----- (四) rte_mbuf
- 使用按键精灵实现界面点击自动化
- 安装包时遇到 requires a peer of @angular/core、unmet peer dependency...的问题
- 物联网技术如何改变了我们的生活?
- 格式化代码_格式化代码是什么意思
- 清华EMBA课程系列思考之十六(1) -- 创新与企业转型
- 科研丨Overleaf打开LaTeX编译报错:PDF渲染错误【已解决】
- HC-SR501人体模块51示例代码
热门文章
- 网络型PLC可编程控制/微机接口及微机应用综合实验装置
- c语言中文内码,C语言辅导:三种常见的中文内码的转换方法
- 更全面的开放能力 HMS Core 5.0重磅亮相华为开发者大会
- Sql Server事务+隔离级别+阻塞+死锁
- 第十一届中国创新创业大赛浙江赛区暨第九届浙江省“火炬杯”创新创业大赛-新一代信息技术行业总决赛
- cad 打开硬件加速卡_绝地求生:如何设置NVIDIA卡使游戏更加流畅高效!及N卡设置原理...
- java获取xml子节点_java如何获取XML中子节点的内容
- C++的XML编程经验
- 清华博士申请退学与教育制度无关?
- bed文件格式(转自http://blog.sina.com.cn/s/blog_70b2b6020100liou.html)