目录
代码仅供学习交流使用
下载腾讯漫画的脚本。空参运行进入交互式模式,支持的参数可以加-h
或--help
参数查看。
工具:
-
python3
-
第三方类库requests
-
python3-pyqt5(GUI依赖,不用GUI可不装)
ubuntu系列系统使用以下命令安装依赖:
URL格式: 漫画首页的URL,如http://m.ac.qq.com/Comic/view/id/518333
(移动版) 或 http://ac.qq.com/Comic/comicInfo/id/17114
, http://ac.qq.com/naruto
(PC版)
注意: 火影忍者彩漫需要访问m.ac.qq.com
搜索火影忍者,因为PC端页面火影忍者彩漫和黑白漫画是一个id一个url。
命令行帮助
usage: getComic.py [-h] [-u URL] [-p PATH] [-d] [-l LIST]
*下载腾讯漫画,仅供学习交流,请勿用于非法用途*
空参运行进入交互式模式运行。
optional arguments:
-h, --help show this help message and exit
-u URL, --url URL 要下载的漫画的首页,可以下载以下类型的url:
http://ac.qq.com/Comic/comicInfo/id/511915
http://m.ac.qq.com/Comic/comicInfo/id/505430
http://pad.ac.qq.com/Comic/comicInfo/id/505430
http://ac.qq.com/naruto
-p PATH, --path PATH 漫画下载路径。 默认: /home/fengyu/tencent_comic
-d, --dir 将所有图片下载到一个目录(适合腾讯漫画等软件连看使用)
-l LIST, --list LIST 要下载的漫画章节列表,不指定则下载所有章节。格式范例:
N - 下载具体某一章节,如-l 1, 下载第1章
N,N... - 下载某几个不连续的章节,如 "-l 1,3,5", 下载1,3,5章
N-N... - 下载某一段连续的章节,如 "-l 10-50", 下载[10,50]章
杂合型 - 结合上面所有的规则,如 "-l 1,3,5-7,11-111"
GUI预览效果
支持不连续的章节选择下载
windows预览效果:
deepin/Linux 预览效果:
全部源码:
****学习交流q群:222020937****
喜欢的点个赞,有不懂也可以在群提问
import requests
import re
import json
import os
import argparse
requestSession = requests.session()
UA = 'Mozilla/5.0 (iPad; CPU OS 5_1 like Mac OS X; en-us) \
AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 \
Mobile/9B176 Safari/7534.48.3' # ipad UA
requestSession.headers.update({'User-Agent': UA})
class ErrorCode(Exception):
'''自定义错误码:
1: URL不正确
2: URL无法跳转为移动端URL
3: 中断下载'''
def __init__(self, code):
self.code = code
def __str__(self):
return repr(self.code)
def isLegelUrl(url):
legal_url_list = [
re.compile(r'^http://ac.qq.com/Comic/[Cc]omicInfo/id/\d+/?$'),
re.compile(r'^http://m.ac.qq.com/Comic/[Cc]omicInfo/id/\d+/?$'),
re.compile(r'^http://ac.qq.com/\w+/?$'),
re.compile(r'^http://pad.ac.qq.com/Comic/[Cc]omicInfo/id/\d+/?$')
]
for legal_url in legal_url_list:
if legal_url.match(url):
return True
return False
def getId(url):
if not isLegelUrl(url):
print('请输入正确的url!具体支持的url请在命令行输入-h|--help参数查看帮助文档。')
raise ErrorCode(1)
numRE = re.compile(r'\d+$')
id = numRE.findall(url)
if not id:
get_id_request = requestSession.get(url)
url = get_id_request.url
id = numRE.findall(url)
if not isLegelUrl(url) or not id:
print('无法自动跳转移动端URL,请进入http://m.ac.qq.com,找到'
'该漫画地址。\n'
'地址应该像这样: '
'http://m.ac.qq.com/Comic/comicInfo/id/xxxxx (xxxxx为整数)')
raise ErrorCode(2)
return id[0]
def getContent(id):
getComicInfoUrl = 'http://pad.ac.qq.com/GetData/getComicInfo?id={}'.format(id)
requestSession.headers.update({'Cookie': 'ac_refer=http://pad.ac.qq.com'})
requestSession.headers.update({'Referer': 'http://pad.ac.qq.com'})
getComicInfo = requestSession.get(getComicInfoUrl)
comicInfoJson = getComicInfo.text
comicInfo &#