最近一段时间迷上了看漫画,所以一不小心就拖更,哈哈,漫画的魅力实在是太大了,没办法,我也控几不住我记几啊。

不过最近家中网络老是不好,严重影响我看漫画的心情,于是就想着提前把漫画在公司下载下来,等到了没网或者网络不好的时候再看。但一个个下载漫画太慢了,有下载这功夫,我还不如直接看完。人呐,就是一个懒惰而又矛盾的生命体啊。没办法,只能另外想办法了。

虽说生活已经如此地艰难,但我还是想到了办法,可以通过一个程序对漫画进行批量下载,并将每个系列归类到各个文件夹中。

说干就干,我们先进入网站利用chrome的强大审查元素的工具对网站的结构进行审查。

先获取一个系列的名称

title = result.select('.listview')[0].text

通过上图获取系列中每篇漫画的地址和标题,我们就可以通过程序进入该链接,获取我们需要的数据,当然,上面只是相对路径,我们可以通过域名+该链接  拼接成完整的路径。

linkAList = result.select('ul li h3 a')

接下来就是漫画正文部分了,我们继续用chrome对正文部分的图片进行审查

虽说我并不知道该网站的漫画为啥显示不出来,不过图片资源还是能访问的,通过上图,我们可以找到正文中漫画图片的定位,我们可以通过元素定位获取到对应的图片列表,并对其进行下载。

imgList = result.select('.article-content img')
urllib.request.urlretrieve(img_url, titlePath + "/%02d.jpg" % titleID)

虽说程序大致已经完成了,不过还有一些问题,就是一般漫画都会有分页,我们需要获取所有分页的漫画。这就需要接着对分页的元素进行审查,通过观察发现,每翻一页,对应的url也会发生变化,既:

也就是说我们只需要将原地址的基础上加上 " _页码 ",即为分页后的数据。

这样,分页后的数据也解决了。不过还有一个问题:

我们不知道一个漫画一共有多少页?

不过这个问题也难不倒我,我们可以通过获取分页的元素进行动态获取分页的总大小。

pageLiArr = result.select(".pagination-wrapper .pagination li a")
print('访问分页的链接地址:' + titleUrl)
    img_cover(titleUrl, titlePath, titleID)
    for pageLi in pageLiArr[3:(len(pageLiArr) - 1)]:
        pageNo = pageLi.text
        tempUrl = titleUrl.replace('.html', '_' + pageNo + '.html')
        print('访问分页的链接地址:' + tempUrl)
        img_cover(tempUrl, titlePath, titleID)

接下来贴一下完整的代码:

import requests
from bs4 import BeautifulSoup
import urllib.request
import os
user_agent = 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36'
comicPath = 'F:\\test\\comic\\'
domainUrl = 'http://www.gllmh.com/'
def getRespone(url):
    req_header = {
'User-Agent': user_agent
    response = requests.get(url, headers=req_header)
    page = response.text
    page = page.encode('ISO-8859-1').decode('gbk', errors='ignore')
    result = BeautifulSoup(page, 'lxml')
    response.close()
return result
def img_cover(url, titlePath, titleID):
        result = getRespone(url)
        imgList = result.select('.article-content img')
for img in imgList:
# 拼接路径
            img_url = img['src']
            urllib.request.urlretrieve(img_url, titlePath + "/%02d.jpg" % titleID)
            titleID = titleID + 1
            print("下载中....,进度:%d" % (titleID / len(imgList) * 100) + "%")
except Exception as e:
        print("页面访问失败,继续访问下一个...")
        print(e)
def downImgUrlList(titleUrl, titlePath, titleID):
    result = getRespone(titleUrl)
    pageLiArr = result.select(".pagination-wrapper .pagination li a")
    print('访问分页的链接地址:' + titleUrl)
    img_cover(titleUrl, titlePath, titleID)
for pageLi in pageLiArr[3:(len(pageLiArr) - 1)]:
        pageNo = pageLi.text
        tempUrl = titleUrl.replace('.html', '_' + pageNo + '.html')
        print('访问分页的链接地址:' + tempUrl)
        img_cover(tempUrl, titlePath, titleID)
def downComicByTypeUrl(url):
    result = getRespone(url)
    title = result.select('.listview')[0].text
    linkAList = result.select('ul li h3 a')
    print(title)
    typePath = comicPath + title
if not os.path.exists(typePath):
        os.mkdir(typePath)
    print('-' * 50)
for linkA in linkAList:
        titleUrl = domainUrl + linkA['href']
        titlePath = typePath + '/' + linkA['title'] + '/'
if not os.path.exists(titlePath):
            os.mkdir(titlePath)
        print('正在下载:' + linkA['title'] + ':' + titleUrl)
        titleID = 0
        downImgUrlList(titleUrl, titlePath, titleID)
if __name__ == '__main__':
# "http://www.gllmh.com/kbmh/xt300/"
    downComicByTypeUrl('http://www.gllmh.com/kbmh/xt300/')

运行程序:

接下来我们就看一看我们的下载后的漫画:

这样就大功告成了,有兴趣的同学也可以去试一试,这样看漫画还是挺方便的。

喜欢本文的话,可以关注一下公众号,每天定时更新一篇python学习日记,让我们一起成长!

项目地址: https://github.com/qblank/python-study.git

你像这样运行脚本: python manga-downloader.py [ python exe路径,系统或虚拟环境] [脚本路径] 然后它会询问 URL。 只需在支持的站点(例如 Batoto.net)中输入 漫画 主页的 URL。 示例输入: : 然后脚本开始运行并在您的工作目录中创建一个文件夹,命名为:“Batoto - [ 漫画 名称]”。 文件夹名称前缀表示 下载 漫画 的站点。 章节在此文件夹中创建为压缩的 ZIP 档案。 一旦您的工作目录中有几个 漫画 文件夹,就可以更轻松地一次性更新它们,而不是为每个 漫画 运行脚本并输入它们的 URL。 为此,您可以使用标志“-r”/“--reload”运行脚本。 以致于现在各行各业都有人不断的加入到 Python 的学习潮流之中,但是对于想要入门 Python 的同学仍一头雾水,虽然网上的资料很多,但是很多资料都比较片面化,且很多是纯文字文档,对于一些想要。说起编程语言, Python 也许不是使用最广的,但一定是现在被谈论最多的。即使不是程序员,能用 Python 写上一小段程序,调用几个接口,也能极大提升工作效率。无论您是计算机相关专业的大学生,还是正在从事软件开发的职场人,甚至是完全零基础的外行小白,本书都适合您阅读和学习。今天给大家分享一份由清华。 下载 漫画 的脚本身为 漫画 迷,一直想直接将 漫画 下载 到电脑上看,于是就有这个 python 脚本。系统:Ubuntu 14.04 python 版本:2.7.6 用到的 python 库有: os (操作系统接口的标准库,用于创建文件) sys (标准库,获取命令行参数) string (字符串操作的标准库,用于将字符串中的数值转换为整型) getopt (对命令行参数进行处理) lxml (当中的html,相 随着大数据时代的到来,人们已经不能满足于平时的活动,转而去寻求虚拟世界的快感,而 漫画 就是其中一种,但是在网站上看 漫画 广告太多且不能 下载 ,十分影响体验,所以我利用 python 来爬取并 下载 漫画 来方便人们观看。 1.导入相应所需要的包。 import os import requests from bs4 import BeautifulSoup import re import random 2.定义多个头文段和ip地址,访问时随机生成,防止ip被封。 headers = [ "Mozill