一.抓包获取链接
以爬取《前科者》为例
获取搜索链接
获取漫画详细页面
第一话的链接
抓包过程中因为headers不同响应也不同,所以需要插入一句
headers = {"Uesr-Agent" : "Dart/2.10 (dart:io)", "region" : "1"}
那么先引用requests模块,写出请求函数和创建目录函数
二.处理搜索链接及其参数
利用抓包软件,获得搜索链接
其中参数limit为显示漫画搜索结果的数目,这个是模糊搜索,参数q就是搜索内容
既然是模糊搜索,那么当然要手动去app搜索一下,并几下想要的漫画排在第几
我们先把limit参数改为1,让链接只返回一部漫画,方便观察响应:
观察漫画详细页面的链接里面的qiankezhe与path_word对应,漫画名字对应name
那么我们根据这个模糊搜索,直接利用json模块获取这两个参数,并存放在name_words和names字典中,并对应上搜索结果的排列顺序,代码:
1 try: 2 name = input("请输入漫画名字:") 3 th = int(input("请输入漫画搜索结果排序位置(数字):")) 4 except: 5 print("输入错误") 6 sys.exit() 7 8 search_url = "https://api.copymanga.com/api/v3/search/comic?limit=10&q={}".format(name) 9 search_str = request_get(search_url) 10 name_str = json.loads(search_str.text).get("results").get("list") 11 name_words = {} 12 names = {} 13 num = 1 14 for i in name_str: 15 name_words.update({num : i.get("path_word")}) 16 names.update({num : i.get("name")}) 17 num += 1
三.处理漫画详细页面及其参数
观察一下链接,limit明显是显示多少话,中间的qiankezhe在上面的name_words字典中
那么修改limit为1,来看一下响应(记得用json格式化,让响应好看一点):
看到里面的uuid与第一话链接对应52f9d522-0d71-11eb-93ea-00163e0ca5bd
那么我们创建这部漫话的目录,然后获取uuid和name(这个name就是第几话),再创建'第几话'目录,方便存放图片:
#创建漫画目录 name_path = path + r'\{}'.format(names[th]) mkdir(name_path) #获取每一话的uuid uuid_url = "https://api.copymanga.com/api/v3/comic/{}/group/default/chapters?limit=200".format(name_words[th]) uuid_str = request_get(uuid_url) uuid_str = json.loads(uuid_str.text).get("results").get("list") for i in uuid_str: chaper = i.get("name") uuid = i.get("uuid") chaper_path = name_path + r"\{}".format(chaper) mkdir(chaper_path) #创建'第几话'目录 down(uuid) #加入用down函数下载图片(down函数暂未写出)
四.编写下载图片的down函数
先看一下第一话的链接
qiankezhe和52f9d522-0d71-11eb-93ea-00163e0ca5bd已经在上面获取了,分别为name_words字典和字符串uuid
再看看响应(这个contents太长了,我就删除一些了):
看代码:
结尾:
这样就可以了,我们引用了4个库:requests, sys, os, json
整合全部代码: