Python 爬取电影天堂top最新电影
Python爬虫有他无可比拟的优势:语法简单,经常几十行代码就能轻松解决问题,相比于JAVA,C,PHP;第三方库丰富,Python强大而又丰富的第三方库使他几乎可以无所不能。今天我们就来用用Python爬取电影天堂最新电影资源,一起来看看吧。
分析网页源代码
进入开发者模式
首先我们打开浏览器,进入开发者模式(这里推荐大家使用谷歌浏览器)
快捷键
开发者模式:Ctrl/shitf + x
或者直接按下:F12
分析下一页网页链接变化规律
我们爬取左边2020新片精品的相关电影。首先传递初始页面的url,先获取2020新片精品的页面链接。我们分析出每一页网页链接的变化规律:比如第一页的链接‘https://www.dy2018.com/html/gndy/dyzz/index.html’,而第二页第三页的网页链接区别于第一页的就是后面几位’index.html’和’index_2.html’,‘index_3.html’
写第一个链接获取函数
def get_detail_urls(initial_url):#解析总页面链接,得到每一个电影的链接pro='index'page_url=[]details=[]detail_urls=[]count=0for i in range(1,8):if i ==1 :index=proelse:index=pro+'_%d'%ihtml=initial_url+index+'.html'page_url.append(html)for i in range(len(page_url)):count+=1try:response=requests.get(url=page_url[i],headers=headers)text=response.content.decode('gbk',errors='ignore')rst=etree.HTML(text)detail=rst.xpath('//td/b/a/@href')details.append(detail)if response.status_code == 200:print('最新电影第%d页网页链接获取成功'%count)except Exception as e:print(e)# print(details)for i in range(len(details)):for j in range(len(details[i])):url=details[i][j]detail_url=base_domain+url#count+=1detail_urls.append(detail_url)return detail_urls
得到每一页的链接后,分析每个电影相关介绍的URL放在哪里,还是在开发者模式里面,点击这个左上角的小箭头,你会发现你的鼠标移到哪下面的标签也会随之发生变化。点击最新电影上面的第一个,发现他把一个电影链接分割成了两部分,
演示图
它将另一部分链接放在了在td/b/a中的href(千万不要写成了herf)属性中,然后就开始写xpath语法了("//td/b/a/@href")这里我们用一下谷歌浏览器的插件xpath来验证一下对不对
编写链接解析函数
接下来我们来解析得到的链接,写一个解析函数。还是先分析所需要的内容在那放着:结果发现它都在一个("//div[@id=‘Zoom’]")里面。遍历依次提取就可以了。用xpath语法提取文本内容要加//text(),这样会返回一个文本。
def parse_detail_urls(url):#获取每个电影相关内容movies={}poster=[]response=requests.get(url=url,headers=headers,timeout=5)text=response.content.decode('gbk',errors='ignore')html=etree.HTML(text)lis=html.xpath("//div[@id='Zoom']")[0]infos = lis.xpath(".//text()")for index,info in enumerate(infos):if info.startswith("◎片 名"):movies['电影名称']=parse_info(info,"◎片 名")elif info.startswith("◎产 地"):movies['产地']=parse_info(info,"◎产 地")elif info.startswith("◎类 别"):movies['类别']=parse_info(info,"◎类 别")elif info.startswith("◎语 言"):movies['语言']=parse_info(info,"◎语 言")elif info.startswith("◎字 幕"):movies['字幕']=parse_info(info,"◎字 幕")elif info.startswith("◎上映日期"):movies['上映时间']=parse_info(info,"◎上映日期")elif info.startswith("◎豆瓣评分"):movies['豆瓣评分']=parse_info(info,"◎豆瓣评分")elif info.startswith("◎片 长"):movies['时长']=parse_info(info,"◎片 长")elif info.startswith("◎导 演"):movies['导演']=parse_info(info,"◎导 演")elif info.startswith("◎标 签"):movies['标签']=parse_info(info,"◎标签")elif info.startswith("◎影片评价"):movies['影评']=infos[index+1].strip()elif info.startswith("◎主 演"):info=parse_info(info,"◎主 演")actors=infofor x in range(index+1,len(infos)):actor=infos[x].strip()if actor.startswith("◎"):breakactors+=actor+'\n'movies['主演'] = actorselif info.startswith("◎简 介"):brief=''for x in range(index + 1, len(infos)):bri = infos[x].strip()if bri.startswith("◎"):breakbrief+=brimovies['简介']='%s'%briefmovie_urls=html.xpath("//tr/td[@bgcolor='#fdfddf']/a/@href")links=''for link in movie_urls:links+='%s'%link+'\n'movies['电影链接']=linksposter_url= lis.xpath(".//img/@src")[0]try:if '电影天堂最新电影top175' in os.listdir('E:\python'):passelse:os.mkdir('电影天堂最新电影top175')print('文件夹创建成功')except Exception as e:print(e)os.chdir('E:\python\电影天堂最新电影top175')img = requests.get(poster_url).contentwith open('%s'%movies['电影名称']+'.jpg','wb') as f:f.write(img)print("%s海报获取成功"%movies['电影名称'])
return movies
我们先用LXML库解析这个网页源代码,一次提取。注意这里的infos是一个列表,如果不在后面用索引指定的话,经常会出错误,要注意。这里用enumerate()这个方法同时提取内容以及索引,可以方便的找到你所要的内容在哪个位置。最后返回一电影详情的字典,电影的信息都在里面。后面可以写入表格里面(由于有的电影主演,简介以及链接较长,都放在里面表格看起来很不美观,建议不要放进去)这里我们用with语句把电影海报链接中的图片保存下来,用OS模块建立一个文件夹,写入照片的时候一定要用get()语句返回照片的字节流文件。然后以二进制的形式写入。经过分析之后发现电影天堂这个网站的写的不是很规范。
最后一步
if __name__ == '__main__':movies=[]headline=''url='https://www.dy2018.com/html/gndy/dyzz/index.html'resp=get_detail_urls(url)#print(resp)for index,info in enumerate(resp):print(info)a = requests.get(url=info, headers=headers)text = a.content.decode('gbk', errors='ignore')resp = etree.HTML(text)title = resp.xpath("//div[@id='Zoom']//text()")for i in title:if i.startswith('◎片 名'):headline = ibreaktry:a=parse_detail_urls(info)print('正在解析{},已完成第{}个,剩余{}个'.format(info,index+1,(len(resp)-index-1)))print("已完成{}%".format(10*(index/len(resp))))movies.append(a)
except :print('第{}页的电影{}解析出错'.format((index//7),headline))
os.chdir('E:/python')data=pd.DataFrame(movies)data.to_csv('电影天堂top175.csv')
这里多写几句便于可视化及时发现问题,检查问题。最后直接以csv文件导出(文件名结尾一定要加".csv"),就是常见的Excel写代码的时候一定要多调试(调试多了会被服务器封禁,注意调试规模,不要让程序多次全部运行,不然会给服务器增加负担,会被拉黑封禁的,可以多在循环的语句里面添加break),看着代码无差错的运行,也是一种享受。
写在最后
写在最后,这个里面会用到xpath语法以及xpath模块,关注公众号后台回复xpath即可获得xpath插件,安装教程以及xpath语法也会后续更新。更多精彩内容持续为您更新,谢谢大家。
想要获取源代码或者运行遇到了问题可以在微信后台私信我,有我的联系方式。
Python 爬取电影天堂top最新电影相关推荐
- python实战(一)Python爬取猫眼评分排行前100电影及简单数据分析可视化python实战(一)Python爬取猫眼排行前一百电影及简单数据分析可视化
python实战(一)Python爬取猫眼排行前一百电影及简单数据分析可视化 一.抓取数据 需要的库 request库 响应http请求 json库 将文本保存成json形式 pyquery 类似JQ ...
- Python爬取豆瓣正在上映的电影
Python爬取豆瓣正在上映的电影 #爬取豆瓣正在上映的电影 import requests from lxml import etree #1.将目标从网站上的页面抓取下来 headers = {' ...
- 使用Python爬取不同类别的豆瓣电影简介
使用Python爬取不同类别的豆瓣电影简介 之前做过一点文本分类的工作,从豆瓣上爬取了不同类别的数千条电影的简介. 爬取目标 我们爬取的目标是 豆瓣影视,打开豆瓣网,随便点击一部电影,即可看到电影的介 ...
- python爬取猫眼正在热映电影
用python写爬虫爬取需要的数据比较容易,以Python简洁的语法和一大波成熟的库,写起来相当的快 python的版本以及使用的库 Python 3.6.4 requests lxml 这次主要是爬 ...
- python 爬取简单静态网站之电影天堂
大家好.今天我在这里与大家分享一下简单的网页抓取. 一.准备工作:下载并安装好python3.x,并且配置好环境变量. 二. 检查安装的软件是否可用:在cmd窗口下分别输入python -V 命令 ...
- Python爬取全球是最大的电影数据库网站IMDb数据
本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. 作者 Dark Horse 前言 在使用 Python 开发爬虫的过程中,requests 和 B ...
- Python爬取国家统计局官网最新全国所有城市县镇数据
最近项目里需要省市区村的数据,网上找了很多方法,都没有如意的,有的老数据竟然还要钱,要积分的我也还认可,我在网上查了下,参考了这位老兄的博客,自己又动手把第五级村级行政加了上去.下面请看大屏幕,我要划 ...
- 利用python 爬取豆瓣即将上映的电影
仅学习交流 Upcoming.py import re import requests from doubanapi import findmovie from bs4 import Beautifu ...
- python爬取有道翻译(最新)
打开有道翻译的页面,我们先打开谷歌浏览器的开发者工具,切换到 network 抓包工具,然后在翻译中输入要翻译的内容,寻找翻译的url地址 我们发现,此请求为 POST 请求,既然是 POST 请求, ...
最新文章
- 前端开发知识总结思维导图
- 985大学的高材生只会写代码片段,丢人吗?
- eBay数据科学家李睿:自然语言处理在eBay的技术实践 数据 网络 类别 技术 分类器 阅读1593 近日,在飞马网主办的“FMI人工智能大数据高峰论坛”上,来自eBay的数据科学家李睿
- 2020-11-13(混淆技术)
- boost::range模块replaced_if相关的测试程序
- 【转载】几个比较靠谱的即时通讯软件
- 通过xshell在linux上安装mysql5.7(终极版)
- 计算机英语input,人教版高中英语选修计算机英语VoiceInput.ppt
- 第五天、LAMP架构
- python教学笔记_python学习笔记(一)
- STC12参考例程(附模块资料代码注释、学习经验总结)
- 函数类型+WINAPI+函数名
- 关于百度机器人搜索你网站的页面权限设置
- 关于使用Git pull出现冲突“error: Your local changes to the following files would be overwritten by merge”解决方案
- Facebook 前端技术栈重构分享
- Tcp/ip协议 详解
- iOS 获取当前的UIViewController
- 数据可视化笔记3 数据可视化基础(几何标记、视觉通道)
- 读书笔记:《狼图腾》和《狼道》
- 如何将闲置的平板作为第二显示器(分屏)使用