在前面的分享中,我们已经知道了如何利用PhantomJS来下载网页中动态加载的图片。本次分享的目标是,下载动漫网页中的漫画,示例网址如下:http://comic.kukudm.com/comiclist/43/ .
  
  分析上面的网页,如果要将页面中的漫画都下载下来,那么首先必须要分析每卷漫画的网址,具体代码如下,其中url_lst为每卷漫画的网址,file_lst为每卷漫画的名字。

def get_url_lst(url):url_lst = []file_lst = []# 讀取網頁html = urllib.request.urlopen(url)  content = html.read()html.close()#網頁解析soup = BeautifulSoup(content, "lxml")table = soup.find_all(id="comiclistn")for tr in table[0].children:count = 0for x in tr:if isinstance(x, bs4.element.Tag):if count == 0:file_lst.append(x.string)if count == 1:url_lst.append(x['href'])count += 1return url_lst, file_lst

  接着需要对每卷漫画进行下载,可以利用for循环遍历url_lst.利用PhantomJS先分析出每卷漫画总的图片数,利用网址的变化规律(就是网址前面的部分不变,数字部分即为图片的编号)去下载每一页的漫画。还有一个比较重要的问题,就是如何解决urlretrieve下载不完全的问题,这个已在上一篇的分享中讲过。具体实现的代码如下:

for i in range(len(url_lst)):#獲取這一頁總的圖片數量browser = webdriver.PhantomJS()browser.set_page_load_timeout(30) # 最大等待时间为30s#当加载时间超过30秒后,自动停止加载该页面try:browser.get(url_lst[i])except (TimeoutException,socket.timeout):browser.execute_script('window.stop()')source = browser.page_sourcetotal_page = int(source[source.find('共')+1:source.find('页')])browser.quit()#创建新文件夹os.mkdir(os.path.join("J:\\comic",file_lst[i]))#遍历图片的网址for j in range(1,1+total_page):browser = webdriver.PhantomJS()browser.set_page_load_timeout(30) # 最大等待时间为30s#当加载时间超过30秒后,自动停止加载该页面try:browser.get(url_lst[i].replace('/1.htm','/%d.htm'%j))except (TimeoutException,socket.timeout):browser.execute_script('window.stop()')source = browser.page_sourcesoup = BeautifulSoup(source,'lxml')#获取图片的下载地址,设置图片名称       image = soup.find('img')url =image.get('src')image_name = "J:\\comic\%s\pic_%d.jpg"%(file_lst[i],j)#解决下载不完全问题,重新尝试五次后仍未下载完即为下载失败try:urllib.request.urlretrieve(url,image_name)print("%s,第%d张图片下载完毕!"%(file_lst[i],j),time.ctime())except (socket.timeout, AttributeError):count = 1while count <= 5:try:urllib.request.urlretrieve(url,image_name)print("%s,第%d张图片下载完毕!"%(file_lst[i],j),time.ctime())breakexcept (socket.timeout, AttributeError):err_info = 'Reloading for %d time'%count if count == 1 else 'Reloading for %d times'%countprint(err_info)count += 1if count > 5:with open('J:\\comic\%s\error.txt'%file_lst[i],'a') as f:f.write("%s,第%d张图片下载失败!\n"%(file_lst[i],j))browser.quit() 

   这样我们就能愉快地在这个网站上下载自己喜欢的动漫啦~笔者的测试如下:
  



  附上全部代码,欢迎大家测试,也欢迎大家交流~~如有不足之处,还请批评指正^o^~

# -*- coding: utf-8 -*-
import os
import bs4
import time
import socket
import urllib
import urllib.request
from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.common.exceptions import TimeoutExceptiondef get_url_lst(url):url_lst = []file_lst = []# 讀取網頁html = urllib.request.urlopen(url)  content = html.read()html.close()#網頁解析soup = BeautifulSoup(content, "lxml")table = soup.find_all(id="comiclistn")for tr in table[0].children:count = 0for x in tr:if isinstance(x, bs4.element.Tag):if count == 0:file_lst.append(x.string)if count == 1:url_lst.append(x['href'])count += 1return url_lst, file_lstdef main():socket.setdefaulttimeout(45)url = 'http://comic.kukudm.com/comiclist/43/'url_lst, file_lst = get_url_lst(url)print('Begin downloading...',time.ctime())           for i in range(len(url_lst)):#獲取這一頁總的圖片數量browser = webdriver.PhantomJS()browser.set_page_load_timeout(30) # 最大等待时间为30s#当加载时间超过30秒后,自动停止加载该页面try:browser.get(url_lst[i])except (TimeoutException,socket.timeout):browser.execute_script('window.stop()')source = browser.page_sourcetotal_page = int(source[source.find('共')+1:source.find('页')])browser.quit()#创建新文件夹os.mkdir(os.path.join("J:\\comic",file_lst[i]))#遍历图片的网址for j in range(1,1+total_page):browser = webdriver.PhantomJS()browser.set_page_load_timeout(30) # 最大等待时间为30s#当加载时间超过30秒后,自动停止加载该页面try:browser.get(url_lst[i].replace('/1.htm','/%d.htm'%j))except (TimeoutException,socket.timeout):browser.execute_script('window.stop()')source = browser.page_sourcesoup = BeautifulSoup(source,'lxml')#获取图片的下载地址,设置图片名称       image = soup.find('img')url =image.get('src')image_name = "J:\\comic\%s\pic_%d.jpg"%(file_lst[i],j)##解决下载不完全问题,重新尝试五次后仍未下载完即为下载失败try:urllib.request.urlretrieve(url,image_name)print("%s,第%d张图片下载完毕!"%(file_lst[i],j),time.ctime())except (socket.timeout, AttributeError):count = 1while count <= 5:try:urllib.request.urlretrieve(url,image_name)print("%s,第%d张图片下载完毕!"%(file_lst[i],j),time.ctime())breakexcept (socket.timeout, AttributeError):err_info = 'Reloading for %d time'%count if count == 1 else 'Reloading for %d times'%countprint(err_info)count += 1if count > 5:with open('J:\\comic\%s\error.txt'%file_lst[i],'a') as f:f.write("%s,第%d张图片下载失败!\n"%(file_lst[i],j))browser.quit()
main()

Python爬虫——漫画下载相关推荐

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  8. 2020-11-08裁判文书网数据python爬虫更新下载

    2020年9月1日更新 文书网2020年8月31日晚更新之后就需要手机注册验证登录了,所以,账号是个问题. 分析 1. 登录 比较简单哦,主要难题是多账号的登录及session的更新维护. 2.其它 ...

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

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

最新文章

  1. Pandas数据处理实战:福布斯全球上市企业排行榜数据整理
  2. TypeScript入门(三)面向对象特性
  3. python中shutil.copyfile的用法_Python shutil.copyfile()用法及代码示例
  4. 基于 Roslyn 实现一个简单的条件解析引擎
  5. set获取元素_C++与STL入门(4):关联容器:集合set
  6. CF1067E Random Forest Rank
  7. SQL SERVER存储过程批量插入数据库表数据
  8. 聊聊汽车智能化时代的ASIL
  9. excel表格横向纵向变换_WPS表格办公—返回Fisher变换值的FISHER函数
  10. django中的关联查询
  11. 马槊, 在古代是将领身份的象征
  12. GEE|导出到google drive的文件太大,每次下载都中断的解决方法
  13. IC-CAD Methodology企业实战之inhouse-tool开发示例
  14. PR AE安装成功后启动卡死的解决
  15. 《网络游戏核心技术与实战》读书笔记
  16. 【Java】三款经典游戏 java版本(开源)提升代码水平
  17. 如何给html文件加背景图片,怎么在文件夹中设置背景图片
  18. mysql 8.0 导入文件_MySQL8.0实验-从本地文件导入数据
  19. Logistic Regression (LR) 详解
  20. 数据库常用命令,不积硅步无以至千里

热门文章

  1. U3D-3D MAX Biped导出.fbx到Unity的Humanoid的骨架不匹配(Disable Triangle Pelvis, Enable Triangle Neck)
  2. Mavenir推出智能物联网平台以实现更智能的分析
  3. 计算机与数学交融的教学设计,信息技术与小学数学学科的整合 小学数学教案...
  4. 域格 ASR CAT1 系列 模块驱动安装及升级
  5. DAY29(DAY30拓展):Vulnhub--靶机实战
  6. arcgis定义投影报错
  7. 【DaVinci Developer专题】-38-Exclusive Area介绍+配置
  8. Zotero使用指南04:群组功能
  9. 什么是同城冗余ZRS和本地冗余LRS?阿里云对象存储OSS详解
  10. Colab提示使用限额,这方法你用了吗?