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最新电影相关推荐

  1. python实战(一)Python爬取猫眼评分排行前100电影及简单数据分析可视化python实战(一)Python爬取猫眼排行前一百电影及简单数据分析可视化

    python实战(一)Python爬取猫眼排行前一百电影及简单数据分析可视化 一.抓取数据 需要的库 request库 响应http请求 json库 将文本保存成json形式 pyquery 类似JQ ...

  2. Python爬取豆瓣正在上映的电影

    Python爬取豆瓣正在上映的电影 #爬取豆瓣正在上映的电影 import requests from lxml import etree #1.将目标从网站上的页面抓取下来 headers = {' ...

  3. 使用Python爬取不同类别的豆瓣电影简介

    使用Python爬取不同类别的豆瓣电影简介 之前做过一点文本分类的工作,从豆瓣上爬取了不同类别的数千条电影的简介. 爬取目标 我们爬取的目标是 豆瓣影视,打开豆瓣网,随便点击一部电影,即可看到电影的介 ...

  4. python爬取猫眼正在热映电影

    用python写爬虫爬取需要的数据比较容易,以Python简洁的语法和一大波成熟的库,写起来相当的快 python的版本以及使用的库 Python 3.6.4 requests lxml 这次主要是爬 ...

  5. python 爬取简单静态网站之电影天堂

    大家好.今天我在这里与大家分享一下简单的网页抓取. 一.准备工作:下载并安装好python3.x,并且配置好环境变量. 二. 检查安装的软件是否可用:在cmd窗口下分别输入python -V  命令 ...

  6. Python爬取全球是最大的电影数据库网站IMDb数据

    本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. 作者 Dark Horse 前言 在使用 Python 开发爬虫的过程中,requests 和 B ...

  7. Python爬取国家统计局官网最新全国所有城市县镇数据

    最近项目里需要省市区村的数据,网上找了很多方法,都没有如意的,有的老数据竟然还要钱,要积分的我也还认可,我在网上查了下,参考了这位老兄的博客,自己又动手把第五级村级行政加了上去.下面请看大屏幕,我要划 ...

  8. 利用python 爬取豆瓣即将上映的电影

    仅学习交流 Upcoming.py import re import requests from doubanapi import findmovie from bs4 import Beautifu ...

  9. python爬取有道翻译(最新)

    打开有道翻译的页面,我们先打开谷歌浏览器的开发者工具,切换到 network 抓包工具,然后在翻译中输入要翻译的内容,寻找翻译的url地址 我们发现,此请求为 POST 请求,既然是 POST 请求, ...

最新文章

  1. 前端开发知识总结思维导图
  2. 985大学的高材生只会写代码片段,丢人吗?
  3. eBay数据科学家李睿:自然语言处理在eBay的技术实践 数据 网络 类别 技术 分类器 阅读1593 近日,在飞马网主办的“FMI人工智能大数据高峰论坛”上,来自eBay的数据科学家李睿
  4. 2020-11-13(混淆技术)
  5. boost::range模块replaced_if相关的测试程序
  6. 【转载】几个比较靠谱的即时通讯软件
  7. 通过xshell在linux上安装mysql5.7(终极版)
  8. 计算机英语input,人教版高中英语选修计算机英语VoiceInput.ppt
  9. 第五天、LAMP架构
  10. python教学笔记_python学习笔记(一)
  11. STC12参考例程(附模块资料代码注释、学习经验总结)
  12. 函数类型+WINAPI+函数名
  13. 关于百度机器人搜索你网站的页面权限设置
  14. 关于使用Git pull出现冲突“error: Your local changes to the following files would be overwritten by merge”解决方案
  15. Facebook 前端技术栈重构分享
  16. Tcp/ip协议 详解
  17. iOS 获取当前的UIViewController
  18. 数据可视化笔记3 数据可视化基础(几何标记、视觉通道)
  19. 读书笔记:《狼图腾》和《狼道》
  20. 如何将闲置的平板作为第二显示器(分屏)使用

热门文章

  1. xunsearch(讯搜)部署安装
  2. 2022-2028年中国成人用品行业市场深度分析及投资前景预测报告
  3. Docker部署 IPsec VPN 服务器
  4. 色彩学基础知识(转)
  5. 同一种方法,同一句话,翻译成英语和泰语,差别为什么这么大?
  6. python歌曲_python抓取并下载音乐歌曲
  7. dma-buf 由浅入深(四) —— mmap
  8. Ada编程语言程序下载地址
  9. mysql left join计算数量_Mysql-多个left join 计算逻辑
  10. windows下的LoadLibrary