电影天堂python分页爬取
爬取电影天堂影片信息
- 一.准备工作
- 二.开始整活
- 三.完整代码
- 四.结果展示
一.准备工作
在爬取之前,应该确定好爬取的对象,分析网页源代码。这里我们需要的是爬取电影天堂的电影信息。文章最后会有完整代码。
1.分页规律
进入https://www.dytt8.net/html/gndy/dyzz/index.html
我们点击第二页,会发现url变为https://www.dytt8.net/html/gndy/dyzz/list_23_2.html
第三页url变为https://www.dytt8.net/html/gndy/dyzz/list_23_3.html
发现每一页的url只是在list_23_*,*处改变,之后就可以将此用{}替换,后期放值就ok。
2.电影详情页url
F12检查元素,找到对应的电影位置
在table标签里面找到a标签的电影详情url
3.电影详情页分析
我需要获取如上信息。
准备工作已经完成,下面开始爬取!!!!
二.开始整活
1.导入包
from lxml import html
import requests
import json
#因为python3.5以上的版本没有etree方法了,我们需要自定义一个etree,原先的etree现在说是html的一个方法。
etree= html.etree
2.设置全局变量
# 全局域名,全局请求头
BASE_DOMATE = 'http://dytt8.net'
HEADERS = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.113 Safari/537.36'}
3.获取详情页面url
# 获取详情页面
def get_datail_urls(url):# 分析:每点击下一页,url上都只有list_23_*改变,*代表的是页码response = requests.get(url, headers=HEADERS)# text会产生乱码,应该使用content手动解码,右键查看网页源代码查看编码方式,看到是gb2312# 但是如果使用content会在分页的时候出现gbk也解析不了的字符,那么就会报错,因为我们只需要url,所以仍然使用texttext = response.text# 解析htmlElement = etree.HTML(text)# 获取a标签属性,包裹在ul/table/tr/td/b里# 拿取class为tbspan的table里面的a标签的hrefdetail_urlss = htmlElement.xpath("//table[@class='tbspan']//a/@href")# map():将detail_url里面的数据都执行lambda,url是参数detail_urls = map(lambda url:BASE_DOMATE+url,detail_urlss)return detail_urls
4.解析详情页面
# 解析详情页面
def parse_detail_page(url):movie = {}response = requests.get(url, headers=HEADERS)text = response.content.decode('gbk')htmlElement = etree.HTML(text)# 1.获取标题:在class为title_all的div中拿到color为#07519a的font中的text值title = htmlElement.xpath("//div[@class='title_all']//font[@color='#07519a']/text()")[0]movie['title'] = title# print(title)# 2.获取海报,在class=zoom里面zoomE = htmlElement.xpath("//div[@id='Zoom']")[0]cover = zoomE.xpath("//img/@src")[0]movie['cover'] = cover# 提取规则def parse_info(info,rule):return info.replace(rule,"").strip()# 3.获取信息,通过span标签infos = zoomE.xpath(".//text()")for index,info in enumerate(infos):# 获取xxx开头的值# 年份if info.startswith("◎年 代"):# strip()去掉空格info= parse_info(info,"◎年 代")movie['year'] = info# 产地elif info.startswith("◎产 地"):info = parse_info(info,"◎产 地")movie['country'] = info# 类别elif info.startswith("◎类 别"):info = parse_info(info,"◎类 别")movie['category'] = info# 评分elif info.startswith("◎豆瓣评分"):info = parse_info(info,"◎豆瓣评分")movie['douban_rating'] = info# 时长elif info.startswith("◎片 长"):info = parse_info(info,"◎片 长")movie['duration'] = info# 导演elif info.startswith("◎导 演"):info = parse_info(info,"◎导 演")movie['director'] = info# 主演elif info.startswith("◎主 演"):actors = [info]info = parse_info(info,"◎主 演")for x in range(index+1,len(infos)):actor = infos[x].strip()if actor.startswith("◎"):breakactors.append(actor)movie["actors"] = actors# 简介elif info.startswith("◎简 介"):info = parse_info(info,"◎简 介")for x in range(index+1,len(infos)):profile = infos[x].strip()if profile.startswith("【下载地址】"):breakmovie["profile"] = profilereturn movie
5.返回每个电影详情的url,并显示movie列表
# 获取每页的url传递给get_detail_urls,详情页面信息
def spider():# 获取前面7页base_url= "https://www.dytt8.net/html/gndy/dyzz/list_23_{}.html"movies = []# 用来控制7页for x in range(1,8):# format补全花括号url = base_url.format(x)# 将url传给get_detail_urlsdetail_urls = get_datail_urls(url)# 获取一页中所有电影详情页面的urlfor detail_url in detail_urls:movie = parse_detail_page(detail_url)movies.append(movie)print(movie)jsObj = json.dumps(movie,ensure_ascii=False)with open('dytt8.json', 'w',encoding='utf-8') as fp:fp.write(jsObj)
三.完整代码
#-coding:utf-8
# author: 钟子龙
# 电影天堂分页爬取
from lxml import html
import requests
import json
etree= html.etree
# 全局域名,全局请求头
BASE_DOMATE = 'http://dytt8.net'
HEADERS = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.113 Safari/537.36'}# 获取详情页面
def get_datail_urls(url):# 分析:每点击下一页,url上都只有list_23_*改变,*代表的是页码response = requests.get(url, headers=HEADERS)# text会产生乱码,应该使用content手动解码,右键查看网页源代码查看编码方式,看到是gb2312# 但是如果使用content会在分页的时候出现gbk也解析不了的字符,那么就会报错,因为我们只需要url,所以仍然使用texttext = response.text# 解析htmlElement = etree.HTML(text)# 获取a标签属性,包裹在ul/table/tr/td/b里# 拿取class为tbspan的table里面的a标签的hrefdetail_urlss = htmlElement.xpath("//table[@class='tbspan']//a/@href")# map():将detail_url里面的数据都执行lambda,url是参数detail_urls = map(lambda url:BASE_DOMATE+url,detail_urlss)return detail_urls# 解析详情页面
def parse_detail_page(url):movie = {}response = requests.get(url, headers=HEADERS)text = response.content.decode('gbk')htmlElement = etree.HTML(text)# 1.获取标题:在class为title_all的div中拿到color为#07519a的font中的text值title = htmlElement.xpath("//div[@class='title_all']//font[@color='#07519a']/text()")[0]movie['title'] = title# print(title)# 2.获取海报,在class=zoom里面zoomE = htmlElement.xpath("//div[@id='Zoom']")[0]cover = zoomE.xpath("//img/@src")[0]movie['cover'] = cover# 提取规则def parse_info(info,rule):return info.replace(rule,"").strip()# 3.获取信息,通过span标签infos = zoomE.xpath(".//text()")for index,info in enumerate(infos):# 获取xxx开头的值# 年份if info.startswith("◎年 代"):# strip()去掉空格info= parse_info(info,"◎年 代")movie['year'] = info# 产地elif info.startswith("◎产 地"):info = parse_info(info,"◎产 地")movie['country'] = info# 类别elif info.startswith("◎类 别"):info = parse_info(info,"◎类 别")movie['category'] = info# 评分elif info.startswith("◎豆瓣评分"):info = parse_info(info,"◎豆瓣评分")movie['douban_rating'] = info# 时长elif info.startswith("◎片 长"):info = parse_info(info,"◎片 长")movie['duration'] = info# 导演elif info.startswith("◎导 演"):info = parse_info(info,"◎导 演")movie['director'] = info# 主演elif info.startswith("◎主 演"):actors = [info]info = parse_info(info,"◎主 演")for x in range(index+1,len(infos)):actor = infos[x].strip()if actor.startswith("◎"):breakactors.append(actor)movie["actors"] = actors# 简介elif info.startswith("◎简 介"):info = parse_info(info,"◎简 介")for x in range(index+1,len(infos)):profile = infos[x].strip()if profile.startswith("【下载地址】"):breakmovie["profile"] = profilereturn movie# 获取每页的url传递给get_detail_urls,详情页面信息
def spider():# 获取前面7页base_url= "https://www.dytt8.net/html/gndy/dyzz/list_23_{}.html"movies = []# 用来控制7页for x in range(1,8):# format补全花括号url = base_url.format(x)# 将url传给get_detail_urlsdetail_urls = get_datail_urls(url)# 获取一页中所有电影详情页面的urlfor detail_url in detail_urls:movie = parse_detail_page(detail_url)movies.append(movie)print(movie)#存入json文件jsObj = json.dumps(movie,ensure_ascii=False)with open('dytt8.json', 'w',encoding='utf-8') as fp:fp.write(jsObj)if __name__ == '__main__':spider()
四.结果展示
因为爬取数据太多,就只用一例来展示。
电影天堂python分页爬取相关推荐
- python爬电影天堂_python爬虫爬取电影天堂电影
python爬虫爬取电影天堂电影?本项目实现一个简单的爬虫,通过requests和BeautifulSoup爬取电影天堂电影信息,包括片名.年代.产地.类别.语言.海报链接和视频链接等内容.pytho ...
- python爬虫——爬取豆瓣TOP250电影
相信很多朋友在看一部电影的时候喜欢先去豆瓣找一下网友对该片的评价.豆瓣作为国内最权威的电影评分网站,虽然有不少水军和精日精美分子,但是TOP250的电影还是不错的,值得一看. 爬取目标 本文将爬取豆瓣 ...
- Python实现爬取豆瓣电影|python豆瓣全栈爬虫:电影系列全爬虫系统1.0:(信息,短评,影评,海报)|你想爬的都有
写在前面: 此博客仅用于记录个人学习进度,学识浅薄,若有错误观点欢迎评论区指出.欢迎各位前来交流.(部分材料来源网络,若有侵权,立即删除) 豆瓣电影全系列爬虫系统 免责声明 情况说明 效果展示 主菜单 ...
- python自动爬取更新电影网站_Python爬虫之—微信实时爬取电影咨询
本文将介绍如何使用爬虫在微信对话中实现实时的电影咨询爬取功能,希望和大家一起来分享" 1. 撩妹起源 俗话说的好:少壮不撩妹,长大徒伤悲啊! 说的很对,但是在这个撩妹的时代,要想成功把到妹, ...
- Python爬虫 爬取豆瓣电影TOP250
Python爬虫 爬取豆瓣电影TOP250 最近在b站上学习了一下python的爬虫,实践爬取豆瓣的电影top250,现在对这两天的学习进行一下总结 主要分为三步: 爬取豆瓣top250的网页,并通过 ...
- python爬虫爬取豆瓣电影排行榜并通过pandas保存到Excel文件当中
我们的需求是利用python爬虫爬取豆瓣电影排行榜数据,并将数据通过pandas保存到Excel文件当中(步骤详细) 我们用到的第三方库如下所示: import requests import pan ...
- python实践 爬取豆瓣各个标签的电影 爬虫
python实践 爬取豆瓣各个标签的电影 实践题目 爬取豆瓣电影中,华语.欧美.韩国.日本电影每个标签下按评价排序的全部电影,需要如下信息: (1)每个电影的电影名.导演.编剧.主演.类型.国家.上映 ...
- Python爬虫爬取豆瓣电影评论内容,评论时间和评论人
Python爬虫爬取豆瓣电影评论内容,评论时间和评论人 我们可以看到影评比较长,需要展开才能完整显示.但是在网页源码中是没有显示完整影评的.所以我们考虑到这部分应该是异步加载的方式显示.所以打开网页的 ...
- Python简单爬取电影磁力链接
Python简单爬取电影磁力链接 网页的链接:http://www.ygdy8.net/html/gndy/dyzz/list_23_2.html 打开你想要的电影:http://www.ygdy8. ...
- Python爬虫之豆瓣电影评论数据的爬取(十四)
原创不易,转载前请注明博主的链接地址:Blessy_Zhu https://blog.csdn.net/weixin_42555080 本次代码的环境: 运行平台: Windows Python版本: ...
最新文章
- java字节对齐 32 64_【C语言】字节对齐问题(以32位系统为例)
- vb matlab 比较,【笔记】VB.NET和MATLAB读取二进制文件(中文+数值)之比较
- MyBatisPlus3.x代码生成器自定义模板配置
- 大牛的距离(笑cry)精简算法
- 如何使用 Barracuda 防火墙设置/保护 Azure 应用程序
- 工作只用jquery,原生js知道就好了
- IOS程序中打开自己的程序,测试机器中是否装了自己的程序(openURL:,canOpenURL:)
- 实现Runnable接口
- java基础英语---第二十四天
- proguard-gui 混淆代码简要笔记
- 国家开放大学-农村社会学-形考作业4
- 软件测试功能测试全套常见面试题【功能测试】面试总结4-2
- 计算机组成原理课程设计报告,计算机组成原理课程设计报告.doc
- play framework自定义插件plugin
- 尚硅谷JAVA基础笔记吐血整理
- [算法]算法学习05
- linux svn图形工具,linux 下svn图形客户端smartsvn 安装
- <video> 标签快进不生效
- 三种设置session有效时间的方法
- Confluence团队协同工具使用文档
热门文章
- Package cmake is not available, but is referred to by another package.
- ubuntu进行apt-get时候出现Package xxx is not available, but is referred to by another package 错误
- Servlet 三大作用域
- 详解C++中fixed,setprecision(),setw()的用法
- 服装制图软件测试初学者,服装行业版软件测试方案.ppt
- python计算金星凌日
- [Ynoi2016]炸脖龙I/Nephren Ruq Insania
- 【数电笔记】加法器、减法器
- 老王的JAVA基础课:第3课 IDEA的安装和使用
- wrf模式计算机配置,科学网-WRF模式的运行-张乐乐的博文