最近被室友安利热血动漫番《终末的女武神》和《拳愿阿修罗》,太上头了周末休息熬夜看完了。不过资源不太好找,辣条一怒爬取了资源,这下可以看个够了。室友崇拜连连,想起了我的班花,快点开学啊,阿西吧...

Python爬虫-vip动漫采集

效果展示

爬取目标

网站目标:樱花动漫

工具使用

开发工具:pycharm

开发环境:python3.7, Windows10

使用工具包:requests,lxml, re,tqdm

重点学习内容

正则的使用 tqdm的使用 各种音频数据的处理

项目思路解析

搜索你需要的动漫数据,根据自己需要的视频不同解析视频的方法也是不一样的(会挑选两种视频进行解析)

在当前页面需要提取出对应的章节信息,获取到章节信息的a标签的跳转内容,提取出每个章节的名字,提取章节的方法我使用的xpath的方法(各位大佬可自行尝试其他的方法)

headers = {
   'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36',
   'Referer': 'http://www.imomoe.la/search.asp'
}

url = 'http://www.imomoe.la/view/8024.html'
response = requests.get(url, headers=headers)
# print(response.content.decode('gbk'))
html_data = etree.HTML(response.content.decode('gbk'))
chapter_list = html_data.xpath('//div[@class="movurl"]/ul/li/a/text()')
chapter_url_list = html_data.xpath('//div[@class="movurl"]/ul/li/a/@href')[0]

url的数据需要自行拼接,根据新的url获取详情页面的数据

按照正常思路首先应该查看播放地址是否为静态数据

明显看出数据并不是静态数据,在区分是否为动态数据,通过抓包工具进行获取。

也并不是动态数据,媒体数据也不知道怎么形成的。

从头在来从前端页面在进行解析,找视频页面的事件。

并没有发现有效数据,但是在iframe下面的Script标签有js跳转地址 ,解析的数据网址和视频的播放地址是一样的域名, 点击查看, 这不是就是我们找的视频播放地址嘛 ,终于找到了,开始实现 在当前页面通过xpath方式提取出script里的js跳转地址, 拼接出新的视频链接播放地址,发送请求,通过正则表达式提取出所有MP4播放地址。

new_url = 'http://www.imomoe.la' + chapter_url_list
response = requests.get(new_url, headers=headers)
html = etree.HTML(response.content.decode('gbk'))

data_url = 'http://www.imomoe.la' + html.xpath('//div[@class="player"]/script[1]/@src')[0]
res = requests.get(data_url, headers=headers).text
# print(res)
play_url_list = re.findall('\$(.*?)\$flv', res)
print(play_url_list)

保存对视频数据发送请求,保存数据到mp4 ,通过tqdm工具能查看对应下载的速度以及下载的进度

for chapter, play_url in tqdm(zip(chapter_list, play_url_list)):
  result = requests.get(play_url, headers=headers).content
  f = open('终末的女武神/' + chapter + '.mp4', "wb")
  f.write(result)

​到这大功告成 但是当我把网址修改成斗破苍穹这个动漫时,却返回的数据为空 

这个视频的加载数据的规则是不一样的加载的数据为m3u8的格式, 其他的音频的数据加载可能也不一样, 处理m3u8的数据稍稍的有丢丢复杂,它的m3u8的文件内部有嵌套了m3u8链接地址, 需要转换对应的数据接口,进行链接地址拼接, 取出ts文件进行下载,拼接成视频。

m3u8_url_list = re.findall('\$(.*?)\$bdhd', res)
for m3u8_url, chapter in zip(m3u8_url_list, chapter_list):
   data = requests.get(m3u8_url, headers=headers)
   # print(data.text)
   new_m3u8_url = 'https://cdn.605-zy.com/' + re.findall('/(.*?m3u8)', data.text)[0]
   # print(new_m3u8_url)
   ts_data = requests.get(new_m3u8_url, headers=headers)
   ts_url_list = re.findall('/(.*?ts)', ts_data.text)
   print("正在下载:", chapter)
   for ts_url in tqdm(ts_url_list):
       result = requests.get('https://cdn.605-zy.com/' + ts_url).content
       f = open('斗破苍穹/' + chapter + '.mp4', "ab")
       f.write(result)

项目思路总结

  • 获取到想要动漫的地址

  • 提取详情页面的名字已经跳转地址

  • 获取页面的静态js文件

  • 解析视频播放地址或者m3u8文件

  • 保存对应数据

简易源码分享

import requests
from lxml import etree
import re
from tqdm import tqdm


headers = {
   'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36',
   'Referer': 'http://www.imomoe.la/search.asp'
}

url = 'http://www.imomoe.la/view/8024.html'
response = requests.get(url, headers=headers)
# print(response.content.decode('gbk'))
html_data = etree.HTML(response.content.decode('gbk'))
chapter_list = html_data.xpath('//div[@class="movurl"]/ul/li/a/text()')
chapter_url_list = html_data.xpath('//div[@class="movurl"]/ul/li/a/@href')[0]
# print(chapter_list)
# print(chapter_url_list)
new_url = 'http://www.imomoe.la' + chapter_url_list
response = requests.get(new_url, headers=headers)
html = etree.HTML(response.content.decode('gbk'))

data_url = 'http://www.imomoe.la' + html.xpath('//div[@class="player"]/script[1]/@src')[0]
res = requests.get(data_url, headers=headers).text
# print(res)
play_url_list = re.findall('\$(.*?)\$flv', res)
print(play_url_list)

for chapter, play_url in tqdm(zip(chapter_list, play_url_list)):
   result = requests.get(play_url, headers=headers).content
   f = open('终末的女武神/' + chapter + '.mp4', "wb")
   f.write(result)




发现不会的或者学习Python的,可以直接评论留言或者私我【非常感谢你的点赞、收藏、关注、评论,一键四连支持】

热血动漫番太好看了!用Python爬取了1T的动漫,内存都爆了的更多相关文章

  1. 这届网友实在是太有才了!用python爬取15万条《我是余欢水》弹幕

    年初时我们用数据解读了几部热度高,但评分差强人意的国产剧,而最近正午阳光带着两部新剧来了,<我是余欢水>和<清平乐>,截止到目前为止,这两部剧在豆瓣分别为7.5分和7.9分,算 ...

  2. Python爬取十四万条书籍信息告诉你哪本网络小说更好看

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者: TM0831 PS:如有需要Python学习资料的小伙伴可以加点击 ...

  3. python爬虫09 | 上来,自己动 !这就是 selenium 的牛逼之处

    作为一个男人 在最高光的时刻 就是说出那句 之后 还不会被人打 ... 虽然在现实生活中你无法这样 但是在这里 就让你体验一番 那种呼风唤雨的感觉 我们之前在爬取某些网站的时候 使用到了一些 pyth ...

  4. python爬虫13 | 秒爬,这多线程爬取速度也太猛了,这次就是要让你的爬虫效率杠杠的

    快 快了 啊 嘿 小老弟 想啥呢 今天这篇爬虫教程的主题就是一个字 快 想要做到秒爬 就需要知道 什么是多进程 什么是多线程 什么是协程(微线程) 你先去沏杯茶 坐下来 小帅b这就好好给你说道说道 关 ...

  5. 他爬取了B站所有番剧信息,发现了这些……

    本文来自「楼+ 之数据分析与挖掘实战 」第 4 期学员 -- Yueyec 的作业.他爬取了B站上所有的番剧信息,发现了很多有趣的数据- 关键信息:最高播放量 / 最强up主 / 用户追番数据 / 云 ...

  6. python3爬虫 爬取动漫视频

    起因 因为本人家里有时候网速不行,所以看动漫的时候播放器总是一卡一卡的,看的太难受了.闲暇无聊又F12看看.但是动漫网站却无法打开控制台.这就勾起了我的兴趣.正好反正无事,去寻找下视频源. 但是这里事 ...

  7. Requests库入门——应用实例-网络图片的爬取与保存(好看的小姐姐≧▽≦)

    在B站学习这一节的时候,弹幕最为激烈,不管大家是出于什么目的都想体验一下网络爬虫爬取图片的魅力,毕竟之前的实例实话说都是一些没有太大作用的信息. 好了,直接上代码: import requests i ...

  8. Ajax介绍及爬取哔哩哔哩番剧索引追番人数排行

    Ajax,是利用JavaScript在保证页面不被刷新,页面链接不改变的情况下与服务器交换数据并更新部分网页的技术.简单的说,Ajax使得网页无需刷新即可更新其内容.举个例子,我们用浏览器打开新浪微博 ...

  9. 爬虫练习四:爬取b站番剧字幕

    由于个人经常在空闲时间在b站看些小视频欢乐一下,这次就想到了爬取b站视频的弹幕. 这里就以番剧<我的妹妹不可能那么可爱>第一季为例,抓取这一番剧每一话对应的弹幕. 1. 分析页面 这部番剧 ...

随机推荐

  1. Docker与k8s的恩怨情仇(四)-云原生时代的闭源落幕

    转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 在本系列前几篇文章中,我们介绍了从Cloud Foundry到Docker等PaaS平台的发展迭代过程.今天 ...

  2. 【Python从入门到精通】(九)Python中字符串的各种骚操作你已经烂熟于心了么?

    您好,我是码农飞哥,感谢您阅读本文,欢迎一键三连哦. 本文将重点介绍Python字符串的各种常用方法,字符串是实际开发中经常用到的,所有熟练的掌握它的各种用法显得尤为重要. 干货满满,建议收藏,欢迎大 ...

  3. rabbitmq概念简介

    AMQP协议 AMQP: Advanced Message Queue,高级队列协议. 特征: 这是一个在进程间传递异步消息的网络协议,因此数据的发送方.接收方以及容器(MQ)都可以在不同的设备上. ...

  4. final添加内存屏障问题

    看了 why大佬的 博客一个困扰我122天的技术问题,我好像知道答案了. 发现他留了个坑,在变量i类型为 int 或者 Integer 时,int类型的i死循环了而Integer类型的i可以结束 in ...

  5. redis-cluster集群安装(windows)

    在此先奉上安装包(链接:https://pan.baidu.com/s/1QHYQPkYPuiRWhdj9APbjnw 提取码:jv8x ) 1. 安装ruby 下载 rubyinstaller-2. ...

  6. spring data jpa执行update和delete语句时报错处理

    之前项目中使用spring data jpa时,遇到删除记录的需求时,主要利用spring data中自带的delete()方法处理,最近在dao层使用delete sql语句时报错,代码如下: @Q ...

  7. WUSTCTF2020 funnyre

    运行起来,发现啥都没反应也没输出,ida直接打开,反编译 .init函数动调了下,发现没啥用,主要核心在于main函数,直接跟进去 发现了核心逻辑,有花指令,直接去掉,发现还挺多,然后似乎不影响观看, ...

  8. XCTF-boomshakalaka-3

    这题讲道理出的挺脑洞的,apk直接拖入jeb打开,找到主活动 这里有两个方法,一个是onCreate()方法,还有一个是onCreateView()方法 onCreate()方法调用了a这个对象的d方 ...

  9. shell运维习题训练

    注:初学shell,以下为本人自己写的答案,如果有更好的,请指教! 1. 求2个数之和: 2. 计算1-100的和 3. 将一目录下所有的文件的扩展名改为bak 4.编译并执行当前目录下的所有.c文件 ...

  10. 两个有序数组合并为一个有序数组---python

    def merge(a, b): """ 合并2个有序数组,默认a,b都是从小到大的有序数组 """ # 1.临时变量 i, j = 0, ...