使用教程

  1. 源码方式
    1). 打开Main.py,运行程序。
    2). 按照提示输入存储路径和漫画名称。路径用"/","","\" 做分隔符都行,代码中都将"“替换成”/"。

        path = input("请输入存储路径:\n").replace("\\","/")
    

    3). 选择要下载的漫画,然后等待下载就行。

    4). 下载结果显示,程序是从最新章节开始下载的,下载完成程序会自动关闭。

  2. 可执行文件方式
    1). 打开Main.exe,按照提示操作。

注意事项

  1. 本项目仅用于学习与交流,请勿用于其他用途。
  2. 会出现单个章节下载不全的情况,这是下载源的问题。
  3. 可执行文件在win7 x64和win10 x64上测试可以正常运行。
  4. 项目没有使用多线程,所以下载速度较慢。

下载地址

  1. 源码下载地址
    1). gitee: https://gitee.com/zy888888/spider
    2). 文末。
  2. 可执行文件下载地址
    1). 百度云链接:https://pan.baidu.com/s/1rqTcuPrWem__Io0_pstjbQ 提取码:mp0u
    2). 在线下载: https://zhouyun.site/Main.exe
import requests
import lxml.html
import os
import reclass Api():# 搜索漫画# keywords: 漫画名字SEARCH_URL = "https://m.wuxiamh.com/search/?keywords={0}"# 下载路径FILE_PATH = "{0}/{1}/{2}"class Book():def __init__(self, book_name, author, url):self._book_name = book_nameself._author = authorself._url = url@propertydef book_name(self):return self._book_name@book_name.setterdef book_name(self, book_name):self._book_name = book_name@propertydef author(self):return self._author@author.setterdef author(self, author):self._author = author@propertydef url(self):return self._url@url.setterdef url(self, url):self._url = url@propertydef type(self):return self._type@type.setterdef type(self, type):self._type = type@propertydef date(self):return self._date@date.setterdef date(self, date):self._date = date@propertydef description(self):return self._description@description.setterdef description(self, description):self._description = descriptiondef __str__(self) -> str:return "{书名: %s , 作者: %s , 链接: %s,  类型: %s, 日期: %s, 简介: %s}" % (self.book_name, self.author, self.url, self.type, self.date, self.description)class Cartoon():def get_html(self, url):"""获取html源码:param url: 需要获取的url:return:   html源码"""if url != None and url != "":response = requests.get(url)if response.status_code == 200:html = response.textreturn htmlelse:raise Exception("请输入正确的链接")def search(self, keywords):"""搜索漫画:param keywords: 漫画名称:return:    html页面"""url = Api.SEARCH_URL.format(keywords)html = self.get_html(url)return htmldef search_result(self, html):"""搜索结果处理:param html: html页面:return: book对象"""selector = lxml.html.fromstring(html)info = selector.xpath("//div[@class='Sub_H2 classify']/span/text()")result_num = int(re.findall("搜索结果,共(\\d*)条", info[0], flags=0)[0])print("搜索结果,共{0}条".format(result_num))if result_num == 0:raise Exception("搜索结果为0,请重新搜索")# 搜索结果urlupdate_list = selector.xpath("//div[@id='update_list']/div/div/div[@class='itemTxt']")book_list = []for itemTxt in update_list:# 搜索结果book_name = itemTxt.xpath("a/text()")[0]author = itemTxt.xpath("p[1]/text()")[0]url = itemTxt.xpath("a/@href")[0]type = itemTxt.xpath("p[2]/span[2]/text()")[0]date = itemTxt.xpath("p[3]/span[2]/text()")[0]book = Book(book_name, author, url)book.type = typebook.date = datebook.description = ""book_list.append(book)i = 0while i < result_num:print("结果" , i + 1, ": ", book_list[i])i += 1# 10次输入机会,10次都错退出程序for i in range(10):result = int(input("请选择结果:\n"))# 越界检查if result > 0 and result <= result_num:# 返回选择的book对象return book_list[result - 1]else:print("请输入正确的结果")def chapeter(self, book):"""获取所有章节:param book: book对象:return: 章节列表"""html = self.get_html(book.url)selector = lxml.html.fromstring(html)book.description = selector.xpath("//div[@class='comic-view clearfix']/p/text()")[0]# 打印书名print(book)li = selector.xpath("//div[@class='list']/ul/li")chapter_dict = {}for i in li:# 章节名称links = "https://m.wuxiamh.com" + i.xpath("a/@href")[0]chapter_name = i.xpath("a/span/text()")[0]chapter_dict[chapter_name] = linksnew_chapter_dict = self.filter(book.book_name ,chapter_dict)return new_chapter_dictdef filter(self, book_name, chapter_dict):"""过滤无效链接:param book_name: 名称:param chapter_dict: 章节字典:return: 过滤后的新章节字典"""new_chapter_dict = {}for chapter in chapter_dict.keys():html = self.get_html(chapter_dict[chapter])selector = lxml.html.fromstring(html)mip_img = selector.xpath("//div[@class='UnderPage']/div[@class='UnderPage']/mip-link/mip-img[1]/@src")if len(mip_img) > 0:webp = mip_img[0]response = requests.get(webp)if response.status_code == 200:new_chapter_dict[chapter] = webpelse:print("异常链接: " + webp)else:print("尊敬的各位喜爱{0}漫画的用户,本站应《{0}》版权方要求现已屏蔽删除本漫画所有章节链接,只保留作品文字信息简介以及章节目录,请喜欢{0}的漫友购买杂志或到官网付费欣赏。为此给各位漫友带来的不便,敬请谅解!".format(book_name))raise Exception("没有版权,无法下载")return new_chapter_dictdef download(self, book_name, chapter_dict):"""下载:param book_name: 书名:param chapter_dict: 章节字典:return:"""for chapter in chapter_dict.keys():file_name = Api.FILE_PATH.format(book_name, chapter)# 目录不存在就创建if os.path.exists(file_name) == False:os.makedirs(file_name)url = chapter_dict[chapter][0:-6]i = 0while True:print("download url: " + url + "{0}.webp".format(i))response = requests.get(url + "{0}.webp".format(i))status_code = response.status_codeif status_code == 200:with open(file_name + "/{0}.jpg".format(i), "wb") as f:f.write(response.content)elif status_code == 404:breaki += 1if __name__ == "__main__":cartoon = Cartoon()path = input("请输入存储路径:\n").replace("\\","/")Api.FILE_PATH = path + "/{0}/{1}"book_name = input("请输入要搜索的漫画名称:\n")try:html = cartoon.search(book_name)book = cartoon.search_result(html)chapter_dict = cartoon.chapeter(book)cartoon.download(book.book_name, chapter_dict)except Exception as e:print(e)

Python爬虫实现下载全本漫画相关推荐

  1. python爬虫下载-python爬虫之下载文件的方式总结以及程序实例

    python爬虫之下载文件的方式以及下载实例 目录 第一种方法:urlretrieve方法下载 第二种方法:request download 第三种方法:视频文件.大型文件下载 实战演示 第一种方法: ...

  2. python 下载文件-python爬虫之下载文件的方式总结以及程序实例

    python爬虫之下载文件的方式以及下载实例 目录 第一种方法:urlretrieve方法下载 第二种方法:request download 第三种方法:视频文件.大型文件下载 实战演示 第一种方法: ...

  3. Python爬虫——王者荣耀全皮肤拉取

    文章目录 Python爬虫--王者荣耀全皮肤拉取 资源地址 HeroScrapy.py 运行上面的代码即可 注意点 Python爬虫--王者荣耀全皮肤拉取 开门见山,话不多说 资源地址 英雄信息列表: ...

  4. 【爬虫实战项目】Python爬虫批量下载音乐飙升榜并保存本地(附源码)

    前言 今天给大家介绍的是Python爬虫批量下载音乐飙升榜并保存本地,在这里给需要的小伙伴们代码,并且给出一点小心得. 首先是爬取之前应该尽可能伪装成浏览器而不被识别出来是爬虫,基本的是加请求头,但是 ...

  5. 【爬虫实战项目】Python爬虫批量下载评书音频并保存本地(附源码)

    前言 今天给大家介绍的是Python爬虫批量下载评书音频并保存本地,在这里给需要的小伙伴们代码,并且给出一点小心得. 首先是爬取之前应该尽可能伪装成浏览器而不被识别出来是爬虫,基本的是加请求头,但是这 ...

  6. python爬虫批量下载“简谱”

    python讨论qq群:996113038 导语: 上次发过一篇关于"python打造电子琴"的文章,从阅读量来看,我们公众号的粉丝里面还是有很多对音乐感兴趣的朋友的.于是,今天我 ...

  7. 新一配:perl循环调用python爬虫批量下载喜马拉雅音频

    新一配:perl循环调用python爬虫批量下载喜马拉雅音频 手机下载喜马拉雅音频后,获得的音频文件虽然可以转成mp3格式,但其文件名却是一长串字符串,无法辨别是哪一集,网上找了各种工具,都有局限性, ...

  8. Python爬虫实战——下载小说

    Python爬虫实战--下载小说 前言 第三方库的安装 示例代码 效果演示 结尾 前言 使用requests库下载开源网站的小说 注意:本文仅用于学习交流,禁止用于盈利或侵权行为. 操作系统:wind ...

  9. 2021-04-01裁判文书网数据python爬虫更新下载

    长期持续更新数据 2020-11-08裁判文书网数据python爬虫更新下载添加链接描述 截至3月已从数据库中下载1亿1200万条裁判文书数据,有需要数据的伙伴可以(。・∀・)ノ゙嗨前台QQ7900- ...

最新文章

  1. 【js】小数点后保留两位小数
  2. 微信小程序商城demo
  3. 分页存储管理和分段存储管理
  4. 【错误记录】Git 使用报错 ( git: ‘switch‘ is not a git command. See ‘git --help‘. )
  5. 网易笔试题——计算机视觉_深度学习方向
  6. 【idea】idea如何配置JDK(转)
  7. 关于Oracle Insert 语句的子查询 和 with check option的用法
  8. delphi 打印指定地点文件_2020年度电脑、打印机耗材及相关配件采购招标公告
  9. 我们用力的活着却把自己丢了
  10. android 字体颜色选择,Android中颜色选择器和改变字体颜色的实例教程
  11. php用json_encode编码后乱码,php json_encode()函数中文编码乱码解决方法_PHP教程
  12. hdoj--5621--KK's Point(简单数学)
  13. 致产品经理:是时候要学学编程了!
  14. 数据结构知识点总结pdf_闭关修炼31天,“啃完”346页pdf,我终于四面拿下阿里offer!...
  15. Windows10下安装原生TensorFlow GPU版
  16. MATLAB实现香农编码
  17. xp系统怎么更改计算机用户名和密码,xp系统如何设置开机密码|xp系统电脑怎么改密码-系统城...
  18. B bearBaby loves sleeping
  19. 如何在EXCEL里画正态分布图
  20. dToF与iToF技术解析

热门文章

  1. 易语言中文编程·从入门到精通
  2. 剑指offer Java题解之JZ73 翻转单词序列
  3. CF1677D-Tokitsukaze and Permutations【结论】
  4. Java数组的定义与使用
  5. 家政公司为什么需要小程序来获客
  6. python 列表排序方法sort、sorted技巧篇
  7. 别猜了,除了泷泽萝拉,小辣椒成功逆袭的秘密全在这里
  8. 简述:http 和 https 有什么区别?为什么有很多网站还在使用 http 呢?
  9. 99%的人不会计算绝对值——探究Java如何实现绝对值函数
  10. 【 OJ 】 HDOJ1019 18年10月31日17:05 [ 18 ]