python画日漫_[日更挑战-第五弹]python-爬取漫画图片
今天用到是python的第三方库: requests
requests这个第三方库一般的使用方法已经在前面的文章《python-爬虫初战》中讲到,今天这篇呢,在requests的基础上加入其他库的支持,相当于实战,在此做个记录。
使用工具:requests,random,xpinyin,os,json,lxml
环境准备:
搭建python开发环境
安装外部包,cmd下运行下面的命令
pip install requests
pip install random
pip install xpinyin
pip install lxml
os 和 json 是python自带的库,就不需要 pip 安装了
源码讲解环节
好的,下面就是喜闻乐见的源码讲解环节了(´◔౪◔)
1、由于这次爬取的网页的特殊,其网页目录路径的一部分是由漫画名称的拼音构成,这里导入xpinyin模块,对中文进行拼音的转换。
# 中文转拼音模块
def Chinaese_to_Pinyin(string):
pin = Pinyin()
#默认分割符为-,后接splitter='',修改为无分割符
pinyin = pin.get_pinyin(string,splitter='')
return pinyin
2、txt是自己编写的一个方法,根据输入的start_str、end字段,返回在两字段之间的字符串。
# txt是自己编写的一个方法,根据输入的start_str、end字段,返回在两字段之间的字符串
def txt(start_str, end, string): #头,尾,字符串
start = string.find(start_str)
if start >= 0:
start += len(start_str)
end = string.find(end, start)
if end >= 0:
return string[start:end].strip()
3、在user-agent池中随机获取一个User-Agent。
# 在user-agent池中随机获取一个
def random_header():
user_agent_list = [
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; AcooBrowser; .NET CLR 1.1.4322; .NET CLR 2.0.50727)",
"Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Acoo Browser; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.0.04506)",
"Mozilla/4.0 (compatible; MSIE 7.0; AOL 9.5; AOLBuild 4337.35; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)",
"Mozilla/5.0 (Windows; U; MSIE 9.0; Windows NT 9.0; en-US)",
]
return {'User-Agent': random.choice(user_agent_list)}
4、下面的就是这次爬虫的核心代码,在同一个网站下,修改name的属性就可以获取其他漫画了。另外,这次的代码中,也整理了两种etree解析的方法(文件解析、代码解析),使用了第二种能大幅节省代码量。这次的网页中需要用到把 "[1,2,3]" 这种字符串字段,转换为列表类型,这里也是搜寻了一下资源,得出了使用json.loads()这个方便快捷的方法。
# 输入想看的漫画的名称
# name = input('请输入需要爬取的漫画的名称: ')
name='我独自盗墓'
# 构造网页url,也是这个网页的特殊性,目录路径用的是漫画名称的拼音,所以这里导入xpinyin库进行转换
# https://www.gufengmh8.com/manhua/woduzidaomu/1302410.html
url = 'https://www.gufengmh8.com/manhua/'+Chinaese_to_Pinyin(name)+'/'
# 调用函数,获取User-Agent
header = random_header()
r = requests.get(url, headers=header).text
# way1 ------
# # 将源代码写入文件
# with open('index.html','w',encoding='utf-8')as f:
# f.write(r)
# # 使用etree中的xpath解析源代码,找到图片url
# parser = etree.HTMLParser(encoding="utf-8")
# tree_1 = etree.parse('index.html',parser=parser)
# way2 ------
# 直接将HTML代码丢给etree解析
tree_2 = etree.HTML(r)
# 获取各章节链接
url_list = tree_2.xpath("//ul[@id='chapter-list-54']/li/a/@href")
# 例如: '/manhua/woduzidaomu/1302408.html'
# 构造完整的章节url
uurl_list=[]
for i in range(len(url_list)):
# rfind与find函数类似,但不同的为后向前匹配,遇到第一个匹配项则返回索引值
n = url_list[i].rfind('/')
uurl_list.append(url+url_list[i][n+1:])
# 例如: 'https://www.gufengmh8.com/manhua/woduzidaomu/1302408.html'
# 获取章节的title
url_title = tree_2.xpath("//ul[@id='chapter-list-54']/li/a/span/text()")
# 例如: '002 话到起点'
# 分别获取各章节的图片
for i in range(len(uurl_list)):
r = requests.get(uurl_list[i], headers=header).text
# txt是自己编写的一个方法,根据输入的start_str、end字段,返回在两字段之间的字符串
file_url_head = 'https://res.xiaoqinre.com/' + txt(r'var chapterPath = "', r'";', r)
file_url_list = txt(r'var chapterImages = ', r';', r)
# print(type(file_url_list)) 这里file_url_list为str,需要转化为list
# 使用json模块的loads方法将str类型的list 转化为list类型
file_url_list = json.loads(file_url_list)
# 导入os模块,判断文件夹是否存在,不存在则创建文件夹
if not os.path.exists('{}\\{}'.format(name, url_title[i])):
os.makedirs('{}\\{}'.format(name, url_title[i]))
for j in range(len(file_url_list)):
url = file_url_head + file_url_list[j]
r = requests.get(url, headers=header).content
with open('{}\\{}\\{}.jpg'.format(name,url_title[i],j), 'wb')as f:
print('正在下载 《{}》 的第{}张图片!!!'.format(url_title[i],j+1))
f.write(r)
3、效果展示
舒服೭(˵¯̴͒ꇴ¯̴͒˵)౨
python画日漫_[日更挑战-第五弹]python-爬取漫画图片相关推荐
- 用python画奥迪标志_不知道不 OK!53 个 Python 经典面试题详解
作者 | Chris 翻译 | 苏本如,责编 | 夕颜 头图 | CSDN付费下载自视觉中国 出品 | CSDN(ID:CSDNnews) 以下为译文: 本文列出53个Python面试问题,并且提供了 ...
- python画兔子代码_【后端开发】如何用Python画一只兔子——turtle库circle()画圆函数的详细用法介绍...
周末学习了一下turtle库的基本函数,试着画了一只大耳朵小兔子,灵感来源是jellycat邦尼兔.turtle库中circle()函数用来画弧,但和通常先确定原点,再根据半径.夹角画弧的方法有所不同 ...
- python画静态烟花_人人都可以写的可视化Python小程序第二篇:旋转的烟花
兴趣是最好的老师 枯燥的编程容易让人放弃,兴趣才是最好的老师.无论孩子还是大人,只有发现这件事情真的有趣,我们才会非常执着的去做这件事,比如打游戏.如果编程能像玩游戏一样变得有趣,我相信很多人就特别愿 ...
- 用python画出圣诞树_【闲趣】如何用python画出一棵圣诞树
C语言你会了,python你会不会? import turtle screen = turtle.Screen() screen.setup(800,600) circle = turtle.Turt ...
- python画卡通人物_追忆童年,教你用Python画出儿时卡通人物
作者 | 张同学 来源 | 凹凸数据 大家好,我是张同学. 又到一年一度的国际儿童节,作为逢节必过的程序猿,怎么可以放过这个学习技能的机会呢? 于是,今天我们来学习 Python 的 Turtle 库 ...
- python常用包数据分析_数据分析领域常用的五个Python包
Numpy Numpy提供了两种基本的对象:ndarray和ufunc.ndarray是存储单一数据类型的多维数组,而ufunc是能够对数组进行处理的函数.Numpy的功能: N维数组,一种快速.高效 ...
- Python《通过解析http请求搞定动态加载,爬取toutiao图片》
今天我们下载头条的图片内容. 进入头条首页,我们根据关键词搜索. 发现有搜索出很多的条目,而且条目是根据鼠标往下滑动的时候就会动态加载出来,是动态更新的,之前我们曾使用过Selenium进行模拟鼠标滑 ...
- Python爬虫实例(5)-简单的爬虫,用XML爬取卡车图片
一个简单的爬虫,所用的技巧都是上几篇博文中讲到的. 用于帮助杨烈的课题,搜集几百张卡车的图片.本来想在百度图片,直接输入"卡车"搜索,但是百度图片的网页加载方式没看明白.只是在&q ...
- python画圆花_简单实现python画圆功能
本文实例为大家分享了python实现画圆功能的具体代码,供大家参考,具体内容如下 import numpy as np import matplotlib.pyplot as plt from mat ...
最新文章
- 测试服务命名和动态注册路由的方式@Xan
- 用mysqlworkbench生成ER图
- 注意!出口货物木质包装IPPC标识规定!
- java servlet jsp javabean关系图_Servlet+JSP+JavaBean开发模式(MVC)介绍
- 优先队列priority_queue自定义比较函数
- angularjs笔记,基本指令,字符串反转,过滤器
- 中国剩余定理----51nod1079
- vue代码如何跟后端代码结合_阿里云服务器优惠购买教程,可获得800元代金券,云服务器仅需82元/年_学云网...
- 枚举,联合,宏定义,结构体
- Client network socket disconnected before secure TLS connection was established
- android gson工具包,Android Study 之 彻底解决 Gson解析 异常
- python编写赛车_90%的人说Python程序慢,5大神招让你的代码像赛车一样跑起来
- 2021及历届国科大高级OS思考题汇总
- 众里寻他千百度-百度发展的秘密
- 老兵新传:Visual Basic核心编程及通用模块开发 pdf电子书
- pdf文档补丁,pdf编辑,去除pdf文件限制
- c# IPAddress类
- 计算机打开后任务栏有但桌面不显示不出来,电脑开机后不显示桌面图标和任务栏,鼠标可以动但是右键没反应,任务管理器能启动,该怎么解决啊?...
- Java解析证书内容
- mysql时间精确到毫秒
热门文章
- iPhone 6将于10月17日中国大陆发售 5288元起
- android 刷新布局,Android之刷新布局
- 土豆网我的视频不能看了,换到了优酷上,放一个上来测试一下.呵呵!
- 浅谈由于cmos电池故障引起的不开机
- Python 生成临时文件和目录 -tempfile
- linux返回_使用Linux返回学校
- 面试高潮季即将来袭,Android 开发者能否在其中鲤鱼跃龙门?
- Android 日历开发教程[六]
- POJ 2942 Knights of the Round Table 【点双联通 + 二分图染色法判奇环】
- 中级 | 想开发微信小游戏,先看看腾讯是如何制定规则的!