拷贝漫画检索下载爬虫

本文介绍了如何使用Python编写一个爬虫,从拷贝漫画网站下载海贼王、哥布林杀手等漫画资源。由于该网站为动态网页,作者通过抓包获取PC版阅读界面,以绕过App版本的限制,提高漫画下载效率。
摘要由CSDN通过智能技术生成

拷貝漫畫 - 海賊王 海贼王 哥布林殺手 哥布林杀手 漫畫 漫画 FGO FGO 東方 东方 艦娘 舰娘 同人志 本子 更新 全集 在綫漫畫 在线漫画 - 拷貝漫畫 拷贝漫画 (copymanga.com)icon-default.png?t=L892https://www.copymanga.com/        拷贝漫画是一个神奇的网站,他的服务器在新加坡,所以可以规避一些风险。资源也丰常丰富,但可惜的是目前还没有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']

        '''遍历元祖的项目'''
        i=1
        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]):
            pass
        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('按任意键退出')

        因为这个网站是动态网页,所以在详情页采用了抓包的方法。提取了pc版的阅读界面(app版本阅读界面会有5张限制)。

  • 8
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
网页拷贝工具XFT是一款方便易用的工具,可以用来下载整个网页或者部分网页内容。 首先,用户需要在电脑上安装XFT工具。安装完成后,用户可以开始使用该工具。 使用XFT工具下载网页非常简单。用户只需复制待下载的网页链接,并将其粘贴到XFT的输入框中。接下来,用户可以选择下载整个网页还是只下载特定部分内容。用户还可以选择保存的文件格式,如HTML或者PDF等。在设置好所有选项后,用户只需点击“开始下载”按钮,XFT工具就会自动开始下载所需内容。 XFT工具具有高效的下载速度,并且能够智能识别网页的结构,确保下载的内容准确无误。该工具还支持多线程下载,可以最大限度地提高下载效率。 此外,XFT工具还具有一些实用的功能,例如自动识别页面内的超链接,并将其一并下载,以及自动处理页面中的图片和媒体文件。这些功能使得XFT工具尤为适合需要离线浏览网页或者需要备份网页内容的用户。 XFT工具不仅适用于个人用户,也可以应用于学术研究、数据分析等领域。用户可以根据自己的需求,将下载的网页内容用于不同的用途。 总而言之,网页拷贝工具XFT是一个功能强大、易于使用的工具,可以帮助用户快速下载网页内容,并灵活处理所需的部分内容。无论是个人用户还是其他行业的专业人士,都可以通过使用XFT工具方便地获取到所需的网页信息。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值