爬取豆瓣电影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表格 , ...
最新文章
- 2017暑假 第四周 学习总结(复习)
- 疫情过后,2020年各省市GDP排行榜top10新鲜出炉,你的家乡排在第几?
- android 退出应用没有走ondestory方法,Android退出应用最优雅的方式(改进版)
- Xcode的简单使用
- 给 JDK 官方提了一个 Bug,结果...
- 3个检测浏览器User-Agent信息的网站
- dj鲜生-34-存档-用户中心地址页重复查询默认地址的优化-利用自定义模型管理器的方法来实现
- 一些有关系统APK的探索(一)
- 项目安装使用uuid_在uniapp中使用fingerprint2实现游客设备标识
- python 练习 27
- 深入理解C#的装箱和拆箱
- 站在巨人的肩膀上看Servlet——原来如此(更适合初学者认识Servlet)
- 现代控制理论——状态、状态空间、状态空间描述
- AutoPatch java_EBS开发技术之Patch安装
- Voxel RCNN:高性能3D目标检测网络(AAAI2021)
- css中div怎么飞翔
- Vue 接入腾讯云【实时音视频】TRTC
- 微软MPP2.0 Microsoft Pen Protocol V2.0 officialEEAP.pdf
- 苹果微信多开_怎样才能下载两个微信
- TYPEC 接口芯片CC逻辑原理与必要性
热门文章
- T3/T6 出纳 年结及反年结操作
- 【BZOJ1875/SDOI2009】HH去散步
- 视频教程-STM32标准库的引入视频课程-第3季第6部分-单片机/工控
- 朗强科技:HDMI信号分配传输器的功能与使用
- html图片右上角加上角标
- bootice添加黑苹果引导_OpenCore引导安装黑苹果卡代码解决方法(内容较多)
- CSP2019入门级第一轮-排列组合题
- 手机 android 系统 升级失败,谷歌再次放出大招!让安卓11系统从此不再变砖:强制无缝升级系统...
- 手机忘记密码的解决方法
- 为什么3D游戏建模师就业要求越来越高的原因