相关文章推荐
爱热闹的松鼠  ·  Perl 运算符 | 菜鸟教程·  7 月前    · 
坐怀不乱的蚂蚁  ·  Date.From - ...·  1 年前    · 
打酱油的野马  ·  centos7.5 ...·  1 年前    · 

拷贝漫画github

拷贝漫画是一个神奇的网站,他的服务器在新加坡,所以可以规避一些风险。资源也丰常丰富,但可惜的是目前还没有ios的客户端,直接看网页端的体验比较一般。所以就萌生出写一个爬虫来下到本地观看的想法。

# 制作时间 2021/9/2 10:36
#此为搜索功能模块提供,拷贝漫画搜索资源库,回报搜索结果和提供详情页的功能
import requests,os
from urllib import parse
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.keys import Keys
import time
'''测试连接'''
print('欢迎使用不可名状的漫画下载器v1\n软件版本 V2 更新时间2021-9-2 有问题加\n正在连接境外服务器请稍后....\n注意安装浏览器驱动chromedriver.exe')
utl1='https://www.copymanga.com/'
text1=str(requests.get(utl1))
text2="<Response [200]>"
'''联网检测函数'''
'''向下滑动函数'''
def slide1():
    for wert in range(300):
        ActionChains(diverex).key_down(Keys.PAGE_DOWN).key_up(Keys.PAGE_DOWN).perform()
        time.sleep(0.2)
        if wert%15==0:
            time.sleep(2)
def slide2(qqq):
    for wert in range(qqq):
        ActionChains(diverex).key_down(Keys.PAGE_UP).key_up(Keys.PAGE_UP).perform()
        time.sleep(0.2)
try:
    if text1==text2:
        print('服务器连接成功!')
        '''开始抓包'''
        headers={'User-Agent':
                     'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.'
                     '4515.159 Mobile Safari/537.36 Edg/92.0.902.84'}
        need_name=input('请输入你想要搜索的漫画名称\n在此输入:')
        need_name2=parse.quote(need_name)
        utl=f'https://www.copymanga.com/api/kb/web/searchs/comics?offset=0&platform=2&limit=12&q={need_name2}&q_type='
        sosuoweb=requests.get(utl)
        wer_er=sosuoweb.json()
        '''这里输出一个带有所有缩影漫画的内容的列表'''
        wer_er2=wer_er['results']['list']
        '''遍历元祖的项目'''
        dic_link={}
        name2={}#这里存储所哟序号对应的漫画名称
        for list_name in wer_er2:#
            look = list_name['path_word']
            '''导出所有元祖里面的name属性'''
            face_link = f'https://api.copymanga.com/api/v3/comic/' + look + f'/group/default/chapters?limit='
            '''导出所有元组里面对应的 抓包链接'''
            dic_link[i] = face_link
            '''吧序号和连接绑定,准备后面引用'''
            print(i, list_name['name'])
            name2[i]=list_name['name']
            i += 1
        '''将输入的序号和字典内容匹配提取utl'''
        name1=int(input('请输入下载漫画的序号,以回车结束\n:'))
        out_link1=dic_link[name1]
        print('正在解析')
        list2=[]
        for yema in range(100,500,100):
            out_link2=out_link1+f'{yema}&offset=0'
            over_link=requests.get(out_link2).json()
            list2+=over_link['results']['list']
        print('正在解析')
        list_i=1
        second_dic={}
        myh_list={}
        for last_name2 in list2:
            meiyihua=last_name2['name']+'--'
            mg_id='https://www.copymanga.com/comic/'+look+'/chapter/'+last_name2['uuid']
            second_dic[list_i]=mg_id
            if list_i%5==0:
                abd='\n'
            else:
                abd = ' '
            print(meiyihua,f'下载序号-{list_i}    ',end=abd)
            myh_list[list_i]=last_name2['name']
            list_i+=1
        '''print(myh_list.items()) 这个是显示 每个下载序列是那个名字'''
        '''获取每一话的漫画界面'''
        lalb=input('\n请输入下载序号星号不要,以回车结束\n若是想进行区间下载可以输入开始和结束下载序号,中间用一个空格分隔,例:1 5\n:')
        print(lalb)
        la=int(lalb.split()[0])
        lb=int(lalb.split()[-1])
        list_last=[]
        '''创建漫画文件夹'''
        if os.path.isdir(name2[name1]):
        else:
            os.mkdir(name2[name1])
        '''打开浏览器'''
        diverex = webdriver.Chrome(executable_path='./chromedriver.exe')
        diverex.set_window_size(480, 800)
        '''打开漫画阅读界面准备爬取'''
        for inin in range(la,lb+1):
            last_link = second_dic[inin]
            print(last_link)
            '''创建每一话的下载目录'''
            if os.path.isdir(f"{name2[name1]}/{myh_list[inin]}"):
                os.makedirs(f"{name2[name1]}/{myh_list[inin]}(1)")
                if os.path.isdir(f"{name2[name1]}/{myh_list[inin]}(1)"):
                    os.makedirs(f"{name2[name1]}/{myh_list[inin]}(2)")
                    if os.path.isdir(f"{name2[name1]}/{myh_list[inin]}(2)"):
                        os.makedirs(f"{name2[name1]}/{myh_list[inin]}(3)")
                        if os.path.isdir(f"{name2[name1]}/{myh_list[inin]}(3)"):
                            os.makedirs(f"{name2[name1]}/{myh_list[inin]}(4)")
            else:
                    os.makedirs(f"{name2[name1]}/{myh_list[inin]}")
            '''浏览器打开漫画阅读界面准备爬取'''
            diverex.get(last_link)
            '''滚轮到最下的函数'''
            slide1()
            '''这里是一共有几张图片'''
            lixt_shuzi = len(diverex.find_elements_by_xpath('html/body/div[1]/div/ul/li'))
            '''print(lixt_shuzi,'图片数目')'''
            '''缓冲时间'''
            if lixt_shuzi>30:
                slide2(120)
            elif lixt_shuzi>50:
                slide2(200)
            elif lixt_shuzi>80:
                slide2(320)
            elif lixt_shuzi>120:
                slide2(480)
            elif lixt_shuzi>200:
                slide2(800)
            elif lixt_shuzi > 300:
                slide2(1200)
            '''创建每一张的名字和其对应的图片链接'''
            for ex in range(1,lixt_shuzi+1):
                lixt_down=diverex.find_elements_by_xpath(f"html/body/div[1]/div/ul/li[{int(ex)}]/img")[0].get_attribute("src")
                print(lixt_down)
                xiazai=requests.get(lixt_down)
                '''开始写入漫画'''
                with open(f"{name2[name1]}/{myh_list[inin]}/第{ex}页.jpg",'wb') as f:
                    f.write(xiazai.content)
                    f.close()
    else:
        print("连接失败!请检查网络连接并重启软件")
    input('按任意键退出')
except:
    print("老兄你有参数输错了,软件重开试试吧\n"
              "可能出现的问题:\n"
              "1.选择漫画的时候输入的是最前面的序号。\n"
              "2.下载的时候单独下载一话只要输入一个下载序号即可\n"
              "3.区间下载先写开始的序号然后是空格(只有一个)然后写结束的序号")
    input('按任意键退出')   
        比喻的修辞手法
        微信小程序