漫画抓取:python网络爬虫与html对应结合抓取讲解
前言
本次以漫画抓取为例,来一步一步结合浏览器后台与爬虫编程讲解,也可以延伸到应对其他不同的网页抓取
一、实现目的
首先说明一下本次抓取的网站:XKCD, 是一个流行的极客漫画网站。
首页url:http://xkcd.com/
但是其中的重点在于:它有一个“Prev”按钮,让用户导航到前面的漫画。
这就很关键了,直接影响到我们抓取漫画的连贯性,换句话说,我们下载完一个漫画之后,下面一个漫画的链接在同一个页面已经存在(整个系统沟通的重点所在)
实现:下载这些XKCD网上的漫画。
二、开始旅程
1.明确思路
- 得到起始的URL。
- 利用 requests 模块下载页面。
- 利用 Beautiful Soup 找到页面中漫画图像的 URL。
- 一起逐步分析html的结构
- 利用 iter_content()下载漫画图像,并保存到硬盘。
- 找到前一张漫画的链接 URL,然后可以重复操作。
2.下载网页
#下载漫画
#! python3
import requests,os,bs4
os.chdir(r'C:\Users\LX\Desktop')
url='http://xkcd.com/'+input('enter number')+'/'
#url='http://xkcd.com/'
os.makedirs('xkcd',exist_ok=True)
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')
不急,我们一步一步来看
第三行开始
3. 导入相应的库requests,os,bs4(应该没有问题哈)
4. 确定我的目录(我用的是桌面哈)
5. 确定url,为什么后面有input()?请看下图分析:
可以看到,目前这一幅漫画的url是 https://xkcd.com/1/,意味着我们输入的input(),会直接决定我们下载下来的漫画是哪一个,甚至还决定我们下载下来的漫画数量。
比如我输入1,那就定位了这个页面,以此类推
6. 如果用这个,会下载所有漫画,因为没有指定嘛,很好理解的哈(如果觉得有问题可以提出来,我们再细讲哈)
7. 创建文件夹,exist_ok=True,即便存在,也不会报错
8. 当我点