1、程序要做的事情:

  • 加载主页
  • 保持该页的漫画图片
  • 转入前一张漫画的链接
  • 重复直到第一张漫画

意味着代码要做的事情

  • 利用requests模块下载页面
  • 利用Beautiful Soup找到页面中漫画图像的URL
  • 利用iter_content()下载漫画图像,并保存到硬盘
  • 找到前一张漫画的链接URL,然后重复

第一步:设计程序

  • 打开一个浏览器的开发者工具,检查该页面上的元素,会发现下面的内容:
  • 漫画图像文件的URL,由一个<img>元素的href属性给出
  • <img>元素在<div id="comic">元素之内
  • Prev按钮有一个rel HTML属性,值是prev
  • 第一张漫画的Prev按钮链接到http://xkcd.com/#URL,表明没有前一个页面了
url='https://xkcd.com/'     #starting url
os.makedirs('xkcd',exist_ok=True)   #store comics in ./xkcd

第二步:下载页面

print('Downloading page %s...' % url)
res=requests.get(url)   #下载
res.raise_for_status()  #如果下载发生问题,就抛出异常,并终止程序

第三步:寻找和下载漫画图像

#Find the URL of the comic image.
comicElem=soup.select('#comic img') #如果没有找到任何元素,那么将返回一个空列表,否则将返回一个列表,包含一个<img>元素。可以从这个<img>元素中取得src属性,将它传递给requests.get(),下载这个漫画图像文件if comicElem==[]:print('Could not find comic image.')else:comicUrl=comicElem[0].get('src')print('Downloading image %s...' % (comicUrl))res=requests.get('http:'+comicUrl)res.raise_for_status()

漫画图像的<img>元素识在一个<div>元素中,它带有的id属性设置为comic。所以选择器‘#comic img’将从BeatifulSoup对象中选出正确的<img>元素

第四步:保存图像,找到前一张漫画

#Save the image to ./xkcd.
imageFile=open(os.path.join('xkcd',os.path.basename(comicUrl)),'wb')
for chunk in res.iter_content(100000):imageFile.write(chunk)
imageFile.close()#Get the Prev Button's url
prevLink=soup.select('a[rel="prev"]')[0]
url='https://xkcd.com/'+prevLink.get('href')

这时,漫画的图像文件保存在变量res中。你需要将图像数据写入硬盘的文件。

整个项目的代码如下:

import requests,os,bs4
url='https://xkcd.com/' #starting url
os.makedirs('xkcd',exist_ok=True)#store comics in ./xkcd
while not url.endswith('#'):print('Downloading page %s...' % url)res=requests.get(url)res.raise_for_status()soup=bs4.BeautifulSoup(res.text,features='html.parser')comicElem=soup.select('#comic img')if comicElem==[]:print('Could not find comic image.')else:comicUrl=comicElem[0].get('src')print('Downloading image %s...' % (comicUrl))res=requests.get('http:'+comicUrl)res.raise_for_status()imageFile=open(os.path.join('xkcd',os.path.basename(comicUrl)),'wb')for chunk in res.iter_content(100000):imageFile.write(chunk)imageFile.close()prevLink=soup.select('a[rel="prev"]')[0]url='https://xkcd.com/'+prevLink.get('href')print('Done')

Python下载所有XKCD漫画相关推荐

  1. python练习项目八——下载所有XKCD 漫画

    项目:下载所有XKCD 漫画 背景 博客和其他经常更新的网站通常有一个首页,其中有最新的帖子,以及一个"前一篇"按钮,将你带到以前的帖子.然后那个帖子也有一个"前一篇&q ...

  2. 【下载所有XKCD漫画】 详细解析

    目录 1,实现目的 2,准备工作 2.1,确保所需模块已安装 2.2,脚本思路 3,全部代码 4,执行结果 1,实现目的 XKCD 是一个流行的极客漫画网站.首页 http://xkcd.com/有一 ...

  3. 【Python】下载所有 XKCD 漫画

    博客和其他经常更新的网站通常有一个首页,其中有最新的帖子,以及一个"前 一篇"按钮,将你带到以前的帖子.然后那个帖子也有一个"前一篇"按钮,以此 类推.这创建了 ...

  4. 看漫画学python下载_Python爬虫——漫画下载

    在文章: Python爬虫--利用PhantomJS下载动态加载图片中,我们已经知道了如何利用PhantomJS来下载网页中动态加载的图片.本次分享的目标是,下载动漫网页中的漫画,示例网址如下:htt ...

  5. 实例:下载所有XKCD漫画

    import requests,os,bs4 url='http://xkcd.com' os.makedirs('xkcd') while not url.endswith('#'):print(' ...

  6. python-web-下载所有xkcd漫画

    下载所有xkcd漫画 # downloads every single xkcd comicimport requests,os,bs4 url='http://xkcd.com' # start u ...

  7. Python批量下载XKCD漫画只需20行命令

    XKCD是一个流行的极客漫画网站,其官网首页有一个 Prev 按钮,让用户导航到前面的漫画.如果你希望复制该网站的内容以在离线的时候阅读,那么可以手动导航至每个页面并保存.但手动下载每张漫画要花较长的 ...

  8. 从XKCD网站下载自动所有漫画图片---python实现

    经常跟新的网站通常有一个首页,其中有最新的帖子,以及一个"前一篇"(或上一页)按钮,用来跳转到以前的帖子.然后那个帖子也有一个"前一篇"的按钮,以此内推.这创建 ...

  9. 使用python下载网站漫画

    最近想回顾一下七龙珠,结果发现腾讯已经收费,而且是按节收费,无奈看看其他网站,找到了一个网站,可以在线看,但是无法下载,最后决定使用python下载下来 首先要分析网站源码,查看源代码 1~42部的U ...

  10. python下载漫画

    下载漫画的脚本 身为漫画迷,一直想直接将漫画下载到电脑上看,于是就有这个python脚本. 系统:Ubuntu 14.04 python版本:2.7.6 用到的python库有: os (操作系统接口 ...

最新文章

  1. python 拓扑排序 dfs bfs_bfs与dfs的优缺点?
  2. html5中的css特性,浅谈HTML5 CSS3的新交互特性
  3. 用PhotoSwipe制作相册,手势可放大
  4. Oracle快速运行一指禅
  5. mysql indexkey提取,MySQL元数据获取基础笔记day06
  6. 两坐标点的直线距离c语言,c语言求平面上2个坐标点的直线距离、求俩坐标直线距离作为半径的圆的面积、递归、菲波那次数列、explode...
  7. [2018.10.15 T1] 或
  8. 移动设备如何当作FL Studio中的MIDI控制器(下)
  9. 溢出植入型木马(后门)的原型实现 作者:FLASHSKY(原创)
  10. 记一次调研DS证据理论中遇到的问题
  11. Epub,Mobi,Azw3电子书格式的区别,有什么好用的epub阅读器
  12. zoom声音如何设置,zoom如何设置声音
  13. latex 双箭头,花体
  14. EMI电磁干扰的来源和分类
  15. Azure NSG Flow Log 引发的自嗨 -- 日志查询分析
  16. iOS——UISearchController(地图联想搜索Demo)
  17. c语言linux系统时间,【整理】C语言设置Linux系统时间 | 勤奋的小青蛙
  18. typescript常用的一些内置类型
  19. Modra Pharmaceuticals于2021 ASCO GU年会公布其转移性前列腺癌IIb期临床试验初步数据
  20. 实用技巧:Google 搜索打不开的解决方法【图文教程】

热门文章

  1. 网页特效——花间飞舞的蝴蝶
  2. 竹间智能:人机交互未来如何改变人类生活
  3. 图像处理农业应用sci_SCI征稿通知
  4. matlab查看剪贴板图片,怎么把图片,txt文档复制到剪贴板中?
  5. 信息安全实训——神奇的木马
  6. 傅里叶变换、短时傅里叶变换和小波变换的概述
  7. 如何计算机房负载,机房UPS电源实际负载容量与负载量是怎么计算的?
  8. 当当网上书店购物车——JS源码
  9. 拯救 中国区 谷歌翻译 解决方案
  10. 100%快速解决谷歌翻译无法使用的问题,附修复工具