10分钟就能写出来的——25~30K的国外企业招聘面试考题,这不是轻轻松松吗~

说来你可能不信 ()
今天的这个案例,是一位同学的面试题,
人在国外,月薪25~30K
本来以为是难度很大的反爬、逆向或者算法之类的,
谁知道,就是一个很简单的爬虫
10分钟就写出来了嗨害大家好!又是我小熊猫 今天来教大家秒杀一下面试10K题!
()
有什么相关报错解答自己不会的、或者源码资料/模块安装/女装大佬精通技巧 都可以来这里:()或者文末私号问我
案例介绍
是一个看美剧的网站,从电影界面这里就可以知道视频内容是m3u8的视频格式
什么是m3u8?
【10分钟就能写出来的——25~30K的国外企业招聘面试考题,这不是轻轻松松吗~】m3u8是苹果公司推出的视频播放标准,是m3u8的一种,只是编码格式采用的是UTF-8 。
现在的视频网站采用的是流媒体传输协议,就是将一段视频切成无数个小段,这几个小段就是ts格式的视频文件,一段一段的网站上播放 。这样做的好处是观看更加流畅,因为他会根据网络状况自动切换视频的清晰度,在网络状况不稳定的情况下,对保障流畅播放非常有帮助 。
网站分析 ()
通过开发者工具抓包分析找寻数据来源
可以通过开发者工具搜索ts文件 找到m3u8的url地址, 或者直接搜索m3u8也可以找到相应的数据包
如果想要批量爬取电影内容的话, 还需要继续找寻这个m3u8的url地址是从哪里可以获取的
和上面的方法一样, 在开发者工具里面进行搜索,找寻相应的数据内容, 找到数据来源之后, 还需要去分析里面的请求url地址 以及请求方式 请求头…
以上是爬取一个视频内容的分析, 如果想要爬取多个视频内容, 还要继续分析 这个请求参数里面URL地址可以从哪里获取
代码 () 实现的基本步骤 发送请求, 对于视频播放详情页面发送请求获取数据, 获取响应体文本数据解析数据, 提取视频标题以及数据包的参数url发送请求, 对于找寻的数据包发送请求获取数据, 获取响应体文本数据解析数据, 提取m3u8的url地址发送请求, 对于m3u8的url地址发送请求获取数据, 获取响应体文本数据解析数据, 提取所有ts文件保存数据, 把视频内容保存本地 完整代码
link_url = 'https://www.imeiju.pro/Play/7483-0-0.html'headers = {'Host': 'www.imeiju.pro','Referer': 'https://www.imeiju.pro/js/player/baiduyun.html','User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.102 Safari/537.36'}response = requests.get(url=link_url, headers=headers)response.encoding = response.apparent_encoding#自动识别编码# print(response.text)title = re.findall("var playn = '(.*?)'", response.text)[0]# 标题video_info = re.findall('第(\d+)集\$(.*?)\$', response.text)print(title)print(video_info)for num, index in video_info:print(title, num, index)url = 'https://www.imeiju.pro/ckplayerx/m3u8.php'# 请求网址# 请求参数 字典数据类型data = http://www.kingceram.com/post/{'url': index,'f': 'ck_m3u8'}# 最后用response变量接收返回数据response = requests.get(url=url, params=data, headers=headers)# url: '(.*?)'(.*?) 表示你想要数据内容m3u8_url = re.findall("url: '(.*?)'", response.text)[0]print(m3u8_url)m3u8_data = requests.get(url=m3u8_url).text# ? 非贪婪匹配模式split() 分割 返回列表m3u8_data = re.sub('#E.*', '', m3u8_data).split()print(m3u8_data)for link in m3u8_data:# for 遍历 把列表元素一个一个提取出来ts_url = 'https://fangao.stboda.com/concat/20210609/fb22f65d884d47238f75ea8aed8cf249/cloudv-transfer/' + linkts_content = requests.get(url=ts_url).content# b二进制 w写入(会覆盖的) a追加写入(不会覆盖)with open(title + num + '.mp4', mode='ab') as f:f.write(ts_content)print(ts_url)