一、前言
Python爬虫三步走:发起请求、解析数据、保存数据,已经掌握,算入门爬虫了吗?
不,还远远不够!只掌握这些,还只能算门外汉级别。
今天,就来带大家继续学习,怎么爬的更优雅!
按照惯例,还是从实战出发,今天咱们就爬个图片,盘点那些遇到的问题,和优雅的解决方案。
本文男女老少皆宜,什么妹子图、肌肉男,学会了本文的方法,一切尽收囊中!
二、实战背景
咱不来吸睛劲爆的图片下载,咱来点清淡的家常菜。
动漫之家漫画下载!
这个实战,你会遇到动态加载、初级反爬,会了本文的方法,你还怕爬不到心心念的"美图"吗?
三、漫画下载
咱不下载整站资源,就挑一本下载,别给服务器太大压力。
挑来挑去,找了本动漫之家排名靠前的一本《妖神记》,说实话,看了漫画第一章的内容,浓浓的火影气息。
URL:https://www.dmzj.com/info/yaoshenji.html
想下载这本动漫,我们需要保存所有章节的图片到本地。我们先捋捋思路:
- 拿到所有章节名和章节链接
- 根据章节链接章节里的所有漫画图片
- 根据章节名,分类保存漫画
看似简单,实际做起来,可能遇到各种各样的问题,让我们一起优雅的解决这些问题吧!
1、获取章节名和章节链接
一个网页,是由很多div元素组成的
不同的div存放不同的内容,如上图,有存放标题Jack Cui的div,有存放菜单的div,有存放正文内容的div,有存放版权信息的div。
瞧,不难发现,只要拿到class属性为zj_list的div标签,就能拿到章节名和章节链接,都存放在这个div标签下的a标签中。
再仔细观察一番,你会发现,div标签下还有个ul标签,ul标签是距离a标签最近的标签。
用上一篇文章讲解的BeautifulSoup,实际上直接匹配最近的class属性为list_con_li的ul标签即可。编写如下代码:
Python
在学习过程中有什么不懂得可以加我的
python学习qun,855408893
群里有不错的学习视频教程、开发工具与电子书籍。
与你分享python企业当下人才需求及怎么从零基础学习好python,和学习什么内容
import requests
from bs4 import BeautifulSoup
target_url = "https://www.dmzj.com/info/yaoshenji.html"
r = requests.get(url=target_url)
bs = BeautifulSoup(r.text, 'lxml')
list_con_li = bs.find('ul', class_="list_con_li")
comic_list = list_con_li.find_all('a')
chapter_names = []
chapter_urls = []
for comic in comic_list:
href = comic.get('href')
name = comic.text
chapter_names.insert(0, name)
chapter_urls.insert(0, href)
print(chapter_names)
print(chapter_urls)
瞧,章节名和章节链接搞定了!
没有难度啊?别急,难的在后面。
2、获取漫画图片地址
我们只要分析在一个章节里怎么获取图片,就能批量的在各个章节获取漫画图片。
我们先看第一章的内容。
URL:https://www.dmzj.com/view/yaoshenji/41917.html
打开第一章的链接,你会发现,链接后面自动添加了#@page=1。