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

使用Python通过requests和BeautifulSoup库自动化下载XKCD漫画,从首页开始,通过遍历'Prev'链接直至到达第一张漫画,过程中解析HTML找到漫画图片URL并下载,同时处理特殊情况。
摘要由CSDN通过智能技术生成

项目:下载所有XKCD 漫画

背景

博客和其他经常更新的网站通常有一个首页,其中有最新的帖子,以及一个“前一篇”按钮,将你带到以前的帖子。然后那个帖子也有一个“前一篇”按钮,以此类推。这创建了一条线索,从最近的页面,直到该网站的第一个帖子。如果你希望拷贝该网站的内容,在离线的时候阅读,可以手工导航至每个页面并保存。但这是很无聊的工作,所以让我们写一个程序来做这件事。XKCD 是一个流行的极客漫画网站,它符合这个结构。首页http://xkcd.com/有一个“Prev”按钮,让用户导航到前面的漫画。手工下载每张漫画要花较长的时间,但你可以写一个脚本,在几分钟内完成这件事。

练习内容

webbrowser 模块

webbrowser.open() 启动一个新浏览器,打开指定的URL
在这里插入图片描述
requests 模块
requests.get() 下载一个网页
接受一个要下载的URL 字符串,返回一个Response 对象,其中包含了Web 服务器对请求做出的响应
在这里插入图片描述
如果请求成功,下载的页面就作为一个字符串,保存在Response 对象的text变量中。这个变量保存了包含整部戏剧的一个大字符串,调用len(res.text)表明。
在这里插入图片描述
Response对象的raise_for_status()方法,检查下载是否成功。
在这里插入图片描述 使用for 循环和Response 对象的iter_content()方法,将Web 页面写入到一个文件。
BeautifulSoup 模块

pip install beautifulsoup4
import bs4

bs4.BeautifulSoup() 创建一个BeautifulSoup 对象

用requests.get()函数从No Starch Press 网站下载主页,然后将响应结果的text 属性传递给bs4.BeautifulSoup()
在这里插入图片描述**select()方法将返回一个Tag 对象的列表,这是Beautiful Soup 表示一个HTML元素的方式。针对BeautifulSoup 对象中的HTML 的每次匹配,列表中都有一个Tag对象。Tag 值可以传递给str()函数,显示它们代表的HTML 标签。Tag 值也可以有attrs 属性,它将该Tag 的所有HTML 属性作为一个字典。
在这里插入图片描述
Tag 对象的
get()**方法让我们很容易从元素中获取属性值
在这里插入图片描述

参考思路

下面是程序要做的事:
① 加载主页;
② 保存该页的漫画图片;
③ 转入前一张漫画的链接;
④ 重复直到第一张漫画。

这意味着代码需要做下列事情:

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

第1步: 打开一个浏览器的开发者工具,检查该页面上的元素,你会发现下面的内容:

  • 漫画图像文件的URL,由一个元素的href 属性给出。
  • < img >元素在< div id=“comic” >元素之内。
  • Prev 按钮有一个rel HTML 属性,值是prev。
  • 第一张漫画的Prev 按钮链接到http://xkcd.com/# URL,表明没有前一个页面了。
#! python3
# downloadXkcd.py - Downloads every single XKCD comic.
import requests, os, bs4
url = 'http://xkcd.com' # starting url
os.makedirs('xkcd', exist_ok=True) # store comics in ./xkcd
while not url.endswith('#'):
	# 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值