文档章节

python3写的腾讯漫画下载器

Feng_Yu
 Feng_Yu
发布于 2014/07/24 22:24
字数 273
阅读 4470
收藏 19

代码很稀烂,开坑后一个月的时间,断断续续总算是写完了,主体功能完成,顺便PYQT5写了个GUI,并用cx_freeze打包,可以在windows下用。

项目托管在github: https://github.com/abcfy2/getComic

git@osc镜像仓库: http://git.oschina.net/abcfy2/getComic

预览效果

放几张预览图,支持不连续的章节选择下载。

windows下的效果:

在此输入图片描述

在此输入图片描述

deepin下效果:

在此输入图片描述

算法描述

腾讯的漫画从PC版访问时看到的是flash,但是移动版的页面却是图片,用ipad的UA请求ac.qq.com可以发现跳转为m.ac.qq.com,从这里入手就可以下载jpg的图片了。

页面的图片是用js生成的,用文本编辑器手工换行就可以很明确的看到js获取图片URL的算法,用python实现即可。

对于http://ac.qq.com/bleach, http://ac.qq.com/cf等这样的地址,用ipad的UA请求后可以直接跳转为m.ac.qq.com的地址,这个地址会带有id参数,就可以获取到图片了。

© 著作权归作者所有

共有 人打赏支持
Feng_Yu
粉丝 157
博文 38
码字总数 45571
作品 0
西安
运维
私信 提问
加载中

评论(34)

涛声依旧吗
涛声依旧吗

引用来自“涛声依旧吗”的评论

现在下载不了漫画了

引用来自“Feng_Yu”的评论

被腾讯盯上了,一周之内三次页面改版,做了反扒处理。暂时没精力细细研究目前的算法。欢迎递交pr

引用来自“涛声依旧吗”的评论

我菜鸟一个,搞不定啊,能给个大概的方向吗😫

引用来自“Feng_Yu”的评论

https://github.com/abcfy2/getComic/issues/22 参考这个issue,上面有我的思路。获取页面图片的算法是通过`nonce`和`DATA`两个变量算出来的,DATA存储的是一个伪BASE64,nonce存储着还原这个BASE64的密钥。只要还原这个BASE64就可以获取漫画的json了。具体这段解密算法就在__decode_data(data, nonce)这段函数中处理。所以你要做的就是在漫画页面打断点,在控制台上观察变量,找到真正得到nonce变量的算法。
好的,谢谢
Feng_Yu
Feng_Yu

引用来自“涛声依旧吗”的评论

现在下载不了漫画了

引用来自“Feng_Yu”的评论

被腾讯盯上了,一周之内三次页面改版,做了反扒处理。暂时没精力细细研究目前的算法。欢迎递交pr

引用来自“涛声依旧吗”的评论

我菜鸟一个,搞不定啊,能给个大概的方向吗😫

引用来自“Feng_Yu”的评论

https://github.com/abcfy2/getComic/issues/22 参考这个issue,上面有我的思路。获取页面图片的算法是通过`nonce`和`DATA`两个变量算出来的,DATA存储的是一个伪BASE64,nonce存储着还原这个BASE64的密钥。只要还原这个BASE64就可以获取漫画的json了。具体这段解密算法就在__decode_data(data, nonce)这段函数中处理。所以你要做的就是在漫画页面打断点,在控制台上观察变量,找到真正得到nonce变量的算法。
在漫画页面上查看源码,可以看到一开始就有个window.nonce = xxxxxxx的变量,页尾有个var DATA = '伪BASE64'的源码。那个DATA的赋值方式一直没改过,就是这个nonce变量的生成改过好几次。最初是直接window.nonce = 'xxxxxxxx',我是通过正则解析html,抓取这个nonce = 'xxxxx'的关键字,然后没多久就改成了window.nonce = '' + 'xxxxxxxxx'。我又修改了正则,支持这种方式。最后又改成了随机会在页面中间插入一个window['no' + 'nce'] = 'xxxxxx',来干扰这个正则抓取,随机会失败,我又做了处理,通过两个正则抓取防止这种随机插入页面的赋值操作。这次又不知道改成什么了,你可以在页面打断点追踪下那个nonce变量看看。所以说这个脚本被腾讯盯上了。
Feng_Yu
Feng_Yu

引用来自“涛声依旧吗”的评论

现在下载不了漫画了

引用来自“Feng_Yu”的评论

被腾讯盯上了,一周之内三次页面改版,做了反扒处理。暂时没精力细细研究目前的算法。欢迎递交pr

引用来自“涛声依旧吗”的评论

我菜鸟一个,搞不定啊,能给个大概的方向吗😫
https://github.com/abcfy2/getComic/issues/22 参考这个issue,上面有我的思路。获取页面图片的算法是通过`nonce`和`DATA`两个变量算出来的,DATA存储的是一个伪BASE64,nonce存储着还原这个BASE64的密钥。只要还原这个BASE64就可以获取漫画的json了。具体这段解密算法就在__decode_data(data, nonce)这段函数中处理。所以你要做的就是在漫画页面打断点,在控制台上观察变量,找到真正得到nonce变量的算法。
涛声依旧吗
涛声依旧吗

引用来自“涛声依旧吗”的评论

现在下载不了漫画了

引用来自“Feng_Yu”的评论

被腾讯盯上了,一周之内三次页面改版,做了反扒处理。暂时没精力细细研究目前的算法。欢迎递交pr
我菜鸟一个,搞不定啊,能给个大概的方向吗😫
Feng_Yu
Feng_Yu

引用来自“涛声依旧吗”的评论

现在下载不了漫画了
被腾讯盯上了,一周之内三次页面改版,做了反扒处理。暂时没精力细细研究目前的算法。欢迎递交pr
涛声依旧吗
涛声依旧吗
现在下载不了漫画了
Feng_Yu
Feng_Yu

引用来自“kunkun2004”的评论

解析后,番外不出现啊

引用来自“Feng_Yu”的评论

能否给出漫画地址?我看看是怎么回事?如果你的是那种多个漫画(比如火影忍者的彩漫和黑白漫画)公用一个URL的,在PC页面是没法解析的。需要从m.ac.qq.com移动端页面进去,搜索地址才是不同的漫画id

引用来自“kunkun2004”的评论

http://ac.qq.com/Comic/ComicInfo/id/505430
跟火影忍者的一样。你看我的项目的README,说明过这种情况。因为这俩漫画实际是不同的ID,但是在PC端页面URL显示为同一个。我的脚本通过抓取URL正则解析漫画ID的。所以你需要从m.ac.qq.com进去搜索漫画,这样你会发现番外篇的URL是这个: http://m.ac.qq.com/comic/index/id/531616,明显可以看到ID和PC端那个是不一样的。粘贴这个地址就是番外篇的
kunkun2004
kunkun2004

引用来自“kunkun2004”的评论

解析后,番外不出现啊

引用来自“Feng_Yu”的评论

能否给出漫画地址?我看看是怎么回事?如果你的是那种多个漫画(比如火影忍者的彩漫和黑白漫画)公用一个URL的,在PC页面是没法解析的。需要从m.ac.qq.com移动端页面进去,搜索地址才是不同的漫画id
我傻了,谢谢
kunkun2004
kunkun2004

引用来自“kunkun2004”的评论

解析后,番外不出现啊

引用来自“Feng_Yu”的评论

能否给出漫画地址?我看看是怎么回事?如果你的是那种多个漫画(比如火影忍者的彩漫和黑白漫画)公用一个URL的,在PC页面是没法解析的。需要从m.ac.qq.com移动端页面进去,搜索地址才是不同的漫画id
http://ac.qq.com/Comic/ComicInfo/id/505430
Feng_Yu
Feng_Yu

引用来自“kunkun2004”的评论

解析后,番外不出现啊
能否给出漫画地址?我看看是怎么回事?如果你的是那种多个漫画(比如火影忍者的彩漫和黑白漫画)公用一个URL的,在PC页面是没法解析的。需要从m.ac.qq.com移动端页面进去,搜索地址才是不同的漫画id
Feng_Yu/getComic

getComic 本代码仅供学习交流使用,严禁用于非法用途,各种PR都欢迎 下载腾讯漫画的脚本。空参运行进入交互式模式,支持的参数可以加或参数查看。 GUI版本提供windows下打包好的版本 点此下载...

Feng_Yu
2015/02/05
0
0
Python实用教学:如何用Python玩转各大网站

Hi~,各位小伙伴,Python是目前编程语言中的主流语言之一,也是公认最容易入门的编程语言,因为Python语言近几年的火爆,有很多小伙伴都开始学习这门语言。 编程语言学习,最重要的是“多看代...

W3Cschool小编
2018/07/31
0
0
入门系列之:Python3 如何使用NLTK处理语言数据

欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由冰糖葫芦 发表于云+社区专栏 介绍 文本已成为最常见的表达形式之一。我们每天都要发送电子邮件、短信、推文、更新状态。因...

腾讯云加社区
2018/07/24
0
0
Python3 如何使用NLTK处理语言数据

欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由冰糖葫芦 发表于云+社区专栏 介绍 文本已成为最常见的表达形式之一。我们每天都要发送电子邮件、短信、推文、更新状态。因...

云加社区
2018/07/24
0
0
国内顶尖白帽子用Python打造渗透工具集,当时花上万购买都被拒!

前言 python是门简单易学的语言,强大的第三方库让我们在编程中事半功倍,今天我们就来谈谈python在渗透测试中的应用,让我们自己动手打造自己的渗透工具集。 一、信息搜集--py端口扫描小脚本...

诸葛青云999
2018/08/18
0
0

没有更多内容

加载失败,请刷新页面

加载更多

IntelliJ IDEA创建第一个Spring boot项目

下载maven:http://maven.apache.org/download.cgi 开发工具:IntelliJ IDEA JDK: Java JDK1.8 ## 1.为了第一个项目初始化速度加快,我们先来配置maven: 添加配置: 选择Build,Execution,Dep...

凌宇之蓝
24分钟前
0
0
Coding and Paper Letter(四十五)

资源整理。 1 Coding: 1.Python库gempy,一种基于Python的开源三维结构地质建模软件,它允许从界面和方向数据隐式(即自动)创建复杂的地质模型。 它还支持随机建模以解决参数和模型的不确定...

胖胖雕
49分钟前
1
0
golang 声明一个指定长度的数组,用于后续添加

很多时候我们需要声明一个指定长度的数组,用于后续添加.在使用go的时候要注意,下面的第一个例子会有报错 "non-constant array bound",应该使用第二个例子. Length 是动态的值 有报错的例子 ...

漫步海边小路
51分钟前
0
0
Java NIO示例

Server端 /** * 《构建高性能的大型分布式Java应用》 * 书中的示例代码 * 版权所有 2008---2009 */package book.chapter1.tcpnio;import java.net.InetSocketAddress;i...

月下狼
57分钟前
0
0
发布xxl-job executor dotnet core 执行器的实现

DotXxlJob [github][https://github.com/xuanye/DotXxlJob] xxl-job的dotnet core 执行器实现,支持XXL-JOB 2.0+ 1 XXL-JOB概述 [XXL-JOB][1]是一个轻量级分布式任务调度平台,其核心设计目标...

假正经哥哥
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部