当前位置: 首页 > news >正文

dede网站源码seo建站系统

dede网站源码,seo建站系统,外围网站做代理,给公司做网站销售怎样啦文章目录 一.目标1.主站2.目标 二.分析1.完整流程2.代码流程 三.重点四.源代码五.总结 好久没有发表爬虫的博文了,其实爬虫一直都有写,只不过没有记录罢了。本次详细分析一个海外视频网站&#…

文章目录

  • 一.目标
    • 1.主站
    • 2.目标
  • 二.分析
    • 1.完整流程
    • 2.代码流程
  • 三.重点
  • 四.源代码
  • 五.总结


好久没有发表爬虫的博文了,其实爬虫一直都有写,只不过没有记录罢了。本次详细分析一个海外视频网站,抓取其中最高画质的视频,撰写本篇博文记录完整分析过程。

一.目标

1.主站

https://watchmovie.ac/
在这里插入图片描述

这个网站的视频内容丰富,直接就能访问,里边的内容包括并不限于电影、电视剧、动漫。

2.目标

本次以电视剧为入口,一步步分析每一层、每个接口的获取,最终拿到视频的最高画质地址,下载视频。

二.分析

1.完整流程

打开一集电视剧,点击播放按钮,视频开始播放。

https://watchmovie.ac/series/roswell-new-mexico-season-4-episode-11

在这里插入图片描述
点击视频下方的下载按钮
在这里插入图片描述

来到了下载中间页,在这个页面可以选择不同的源,我这里直接选择了第三个(因为相对其他三个简单)。

https://membed.net/download?id=MzY3NzAx&title=Roswell%2C+New+Mexico±+Season+4+Episode+11±+Follow+You+Down&typesub=SUB&sub=L3Jvc3dlbGwtbmV3LW1leGljby1zZWFzb24tNC1lcGlzb2RlLTExLWZvbGxvdy15b3UtZG93bi9yb3N3ZWxsLW5ldy1tZXhpY28tc2Vhc29uLTQtZXBpc29kZS0xMS1mb2xsb3cteW91LWRvd24udjEudnR0&cover=Y292ZXIvcm9zd2VsbC1uZXctbWV4aWNvLXNlYXNvbi00LnBuZw==&c=aaaaaaaa&refer=https://watchmovie.ac/

在这里插入图片描述

点击第三个按钮,来到了视频下载页面(这个封面有点哲学)。

https://embedsito.com/f/lnjz2fnmxd1zk53#caption=https://msubload.com/sub/roswell-new-mexico-season-4-episode-11-follow-you-down/roswell-new-mexico-season-4-episode-11-follow-you-down.v1.vtt

在这里插入图片描述

点击左侧下载按钮,等待10秒钟,出现了下面的页面

其实在这个过程中向服务器发送了一个POST请求,地址为:

https://embedsito.com/api/source/lnjz2fnmxd1zk53

在这里插入图片描述

其实这两个地址是从接口返回的数据中拿到的
在这里插入图片描述

直接选择一个清晰度,点击按钮,就跳到了MP4播放页面
在这里插入图片描述
这个MP4地址是能够粘贴到迅雷里直接下载的,清晰度也可以。
![在这里插入图片描述](https://img-blog.csdnimg.cn/aa68decbcac440e2b92ccea8b9a78eda.png#pic_center
国内下载确实不怎么快。

2.代码流程

先放一个我自己的分析草图
在这里插入图片描述
放一张完整分析流程图
在这里插入图片描述

三.重点

在分析过程中,发现此网站很多网页都存在JS监控开发者工具的代码,即当你打开了开发者工具,网页会给予提示甚至直接隐藏或者跳转。
在这里插入图片描述

或者
在这里插入图片描述

所以在分析过程中,还是要借助一下抓包工具,比如在分析最后一个页面的接口时,我用到了Fiddler。
在这里插入图片描述
在JS中发现了POST中的API地址。

在这里插入图片描述
直接获取所有的下载地址存储到数组,然后按索引取-1拿到最高画质!

四.源代码

# coding:utf-8
import requests
import json
from lxml import etree
import reclass WatchMovieSpider(object):def __init__(self, url):super(WatchMovieSpider, self).__init__()self.normal_headers = {"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36"}self.base_url = urlself.watchMovie_domain = "https://watchmovie.ac"def do_request(self, url, headers, json_flag=False):"""携带headers发送请求到url返回值类型可以是html也可以是json"""try:r = requests.get(url, headers=headers)if r.status_code == 200:html = r.textif json_flag:_json_data = json.loads(html)return _json_dataelse:return htmlreturn Falseexcept:return Falsedef get_all_eps_link_and_name(self, ):"""根据用户输入的电视剧、动漫获取其下所有剧集的地址"""if not self.base_url.endswith("/"):all_eps_page_link = self.base_url + "/season"html = self.do_request(all_eps_page_link, self.normal_headers)if html:res = etree.HTML(html)selector = res.xpath('//div[@class="main-inner"]//ul[@class="video_module carousel"]/li//div[@class="vid_info"]/span[1]')data_list = []for index, each in enumerate(selector):item = {}title = each.xpath('./a[@class="videoHname"]/@title')if title:video_ep_title = title[0]else:video_ep_title = "eps{}".format(index)link = each.xpath('./a[@class="videoHname"]/@href')if link:video_ep_link = self.watchMovie_domain + link[0]else:video_ep_link = ""item['video_ep_title'] = video_ep_titleitem['video_ep_link'] = video_ep_linkdata_list.append(item)data_list.reverse()  # 反转列表 使得电视剧集从小到大排列return data_listreturn Falsedef get_downloadPage_link(self, ep_link):"""根据主站获取iframe地址:return:"""html = self.do_request(ep_link, headers=self.normal_headers)if html:iframe_link = re.findall('<iframe src="(.*?)".*?></iframe>', html)if iframe_link:iframe_real_link = "https:" + iframe_link[0]donwloadPage_link = iframe_real_link.replace("streaming.php", "download")return donwloadPage_linkreturn Falsedef get_postApi_addr(self, donwloadPage_link):"""访问根据下载页面,解析出【第三个按钮】的地址使用字符串拼接,拼接出视频下载接口地址:return:"""html = self.do_request(donwloadPage_link, headers=self.normal_headers)if html:res = etree.HTML(html)aim_link = res.xpath('//div[@class="mirror_link"]/div[@class="dowload"]/a[text()="Download Xstreamcdn"]/@href')if aim_link:apiString = aim_link[0].split("#")[0].split("/")[-1]postApi = "https://embedsito.com/api/source/" + apiStringreturn postApielse:# 设置一个提取Btn3的备选方案print("使用plan2")# 先提取出所有的地址,再使用字符串匹配all_btn_links = res.xpath('//div[@class="mirror_link"]/div[@class="dowload"]/a/@href')if all_btn_links:aim_link = [l for l in all_btn_links if l.startswith("https://embedsito.com")]if aim_link:apiString = aim_link[0].split("#")[0].split("/")[-1]postApi = "https://embedsito.com/api/source/" + apiStringreturn postApireturn Falsedef get_movie_downloadAddr(self, postApi):"""根据postApi获取真正的视频下载地址:param postApi::return:"""try:r = requests.post(postApi, headers=self.normal_headers)if r.status_code == 200:_json_data = r.json()movie_high_addr = self.parse_movie_high(_json_data)real_mp4_link = self.get_redirect_after_addr(movie_high_addr)return real_mp4_linkreturn Falseexcept:return Falsedef parse_movie_high(self, _json_data):"""根据_json_data解析出画质最高的电影:param _json_data::return:"""data = _json_data.get("data")print("-" * 50)movie_high_addr = data[-1].get("file")return movie_high_addrdef get_redirect_after_addr(self, link):"""获取重定向之后真实的mp4播放地址"""r = requests.get(link, headers=self.normal_headers, allow_redirects=False)  # 禁止重定向,拿到真实的mp4地址if r.status_code == 302:  # 获取重定向之后的真实mp4视频地址return r.headers.get('Location')elif r.status_code == 200:return r.urlelse:return Falsedef video_name_format(self, name_str, ep):"""将电视剧名称转化为指定格式的名称"""# 正则提取一下剧名ep_name = re.findall("Episode (.*?)$", name_str)if ep_name:eps_name_sp = ep_name[0].strip().split(" ")eps_name_sp.pop(0)eps_name = ' '.join(eps_name_sp)else:if "-" in name_str:eps_name = name_str.split("-")[-1].strip()else:eps_name = ""tv_eps = re.findall("Season \d+ Episode(\d) -", name_str)if tv_eps:eps_num = tv_eps[0]else:eps_num = epeps_name = eps_name.replace("-", "").strip()full_ep_name = "Eps {}: {}".format(eps_num, eps_name)if full_ep_name.strip().endswith(":"):final_tv_name = full_ep_name.split(":")[0]else:final_tv_name = full_ep_namereturn final_tv_namedef main():all_eps_link_name = spider.get_all_eps_link_and_name()print("ep_sum=", len(all_eps_link_name))for index, video_item in enumerate(all_eps_link_name):result = {}video_each_name = video_item['video_ep_title']result['name'] = spider.video_name_format(video_each_name, index + 1)video_each_link = video_item['video_ep_link']downloadPage_link = spider.get_downloadPage_link(video_each_link)  # downloadPage_link:下载页面的地址,包含四个按钮postApi = spider.get_postApi_addr(downloadPage_link)if postApi:real_mp4_link = spider.get_movie_downloadAddr(postApi)if real_mp4_link:result['link'] = real_mp4_linkelse:result['link'] = ""else:result['link'] = ""print("没有解析出视频下载接口!")print(result)if __name__ == '__main__':lnik = "https://watchmovie.ac/series/the-amazing-race-canada-season-8"if lnik.startswith("http") or lnik.startswith("https"):spider = WatchMovieSpider(lnik)main()else:print("输入地址不合法!")

五.总结

本次分析了一个海外视频网站,着重在于爬虫的分析思路,因为这会直接影响代码的撰写。发表本篇记录一下分析过程,也为其他的道友踩踩坑。思路、代码方面有什么不足欢迎各位大佬指正、批评!
在这里插入图片描述

http://www.15wanjia.com/news/22158.html

相关文章:

  • 用织梦做领券网站百度首页网址
  • 网站开发项目的简介跨境电商关键词工具
  • 做网站背景图片seo网站推广首页排名
  • 大连网站建设谁家好网络推广的主要工作内容
  • seo网站系统怎么才能建立一个网站卖东西
  • 浏阳做网站的有哪几家seo百度关键字优化
  • 个人理财的网站开发长春网站建设策划方案
  • soho外贸网站建设seo管理系统
  • 服务范围 网站建设公司电商运营工作内容
  • 设计成功一个电子商务网站关键词优化搜索引擎
  • 橙色可以做哪些网站mac蜜桃923色号
  • 做地产的设计网站站长工具的网址
  • 寿县有做网站开发的吗大连做优化网站哪家好
  • 张家港外贸型网站建设网络营销方式哪些
  • 贵州建设网老网站域名被墙查询
  • 做企业网站需要做什么优化关键词的方法
  • 关于华大18年专注seo服务网站制作应用开发双滦区seo整站排名
  • 专做运动品牌的网站公司企业网站模板
  • 青岛网站建设哪家湘潭网站建设
  • dedecms婚纱摄影网站模板疫情最新资讯
  • 如何在阿里云自主建网站关键词推广效果分析
  • 做网站算运营吗广州网络营销推广
  • 广告东莞网站建设技术支持南宁百度推广代理公司
  • 不允许做企业网站应用商店app下载
  • 2015做导航网站好企业qq怎么申请
  • 关于二手书的网站开发ppt北京网优化seo优化公司
  • 旅游网站的设计方案怎么做新浪网今日乌鲁木齐新闻
  • 服务器做网站需安装哪些软件郑州seo技术外包
  • 酒店 深圳 网站制作广告策划方案范文
  • 游戏在线玩湖南百度seo