今天用到是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-爬取漫画图片相关推荐

  1. 用python画奥迪标志_不知道不 OK!53 个 Python 经典面试题详解

    作者 | Chris 翻译 | 苏本如,责编 | 夕颜 头图 | CSDN付费下载自视觉中国 出品 | CSDN(ID:CSDNnews) 以下为译文: 本文列出53个Python面试问题,并且提供了 ...

  2. python画兔子代码_【后端开发】如何用Python画一只兔子——turtle库circle()画圆函数的详细用法介绍...

    周末学习了一下turtle库的基本函数,试着画了一只大耳朵小兔子,灵感来源是jellycat邦尼兔.turtle库中circle()函数用来画弧,但和通常先确定原点,再根据半径.夹角画弧的方法有所不同 ...

  3. python画静态烟花_人人都可以写的可视化Python小程序第二篇:旋转的烟花

    兴趣是最好的老师 枯燥的编程容易让人放弃,兴趣才是最好的老师.无论孩子还是大人,只有发现这件事情真的有趣,我们才会非常执着的去做这件事,比如打游戏.如果编程能像玩游戏一样变得有趣,我相信很多人就特别愿 ...

  4. 用python画出圣诞树_【闲趣】如何用python画出一棵圣诞树

    C语言你会了,python你会不会? import turtle screen = turtle.Screen() screen.setup(800,600) circle = turtle.Turt ...

  5. python画卡通人物_追忆童年,教你用Python画出儿时卡通人物

    作者 | 张同学 来源 | 凹凸数据 大家好,我是张同学. 又到一年一度的国际儿童节,作为逢节必过的程序猿,怎么可以放过这个学习技能的机会呢? 于是,今天我们来学习 Python 的 Turtle 库 ...

  6. python常用包数据分析_数据分析领域常用的五个Python包

    Numpy Numpy提供了两种基本的对象:ndarray和ufunc.ndarray是存储单一数据类型的多维数组,而ufunc是能够对数组进行处理的函数.Numpy的功能: N维数组,一种快速.高效 ...

  7. Python《通过解析http请求搞定动态加载,爬取toutiao图片》

    今天我们下载头条的图片内容. 进入头条首页,我们根据关键词搜索. 发现有搜索出很多的条目,而且条目是根据鼠标往下滑动的时候就会动态加载出来,是动态更新的,之前我们曾使用过Selenium进行模拟鼠标滑 ...

  8. Python爬虫实例(5)-简单的爬虫,用XML爬取卡车图片

    一个简单的爬虫,所用的技巧都是上几篇博文中讲到的. 用于帮助杨烈的课题,搜集几百张卡车的图片.本来想在百度图片,直接输入"卡车"搜索,但是百度图片的网页加载方式没看明白.只是在&q ...

  9. python画圆花_简单实现python画圆功能

    本文实例为大家分享了python实现画圆功能的具体代码,供大家参考,具体内容如下 import numpy as np import matplotlib.pyplot as plt from mat ...

最新文章

  1. 测试服务命名和动态注册路由的方式@Xan
  2. 用mysqlworkbench生成ER图
  3. 注意!出口货物木质包装IPPC标识规定!
  4. java servlet jsp javabean关系图_Servlet+JSP+JavaBean开发模式(MVC)介绍
  5. 优先队列priority_queue自定义比较函数
  6. angularjs笔记,基本指令,字符串反转,过滤器
  7. 中国剩余定理----51nod1079
  8. vue代码如何跟后端代码结合_阿里云服务器优惠购买教程,可获得800元代金券,云服务器仅需82元/年_学云网...
  9. 枚举,联合,宏定义,结构体
  10. Client network socket disconnected before secure TLS connection was established
  11. android gson工具包,Android Study 之 彻底解决 Gson解析 异常
  12. python编写赛车_90%的人说Python程序慢,5大神招让你的代码像赛车一样跑起来
  13. 2021及历届国科大高级OS思考题汇总
  14. 众里寻他千百度-百度发展的秘密
  15. 老兵新传:Visual Basic核心编程及通用模块开发 pdf电子书
  16. pdf文档补丁,pdf编辑,去除pdf文件限制
  17. c# IPAddress类
  18. 计算机打开后任务栏有但桌面不显示不出来,电脑开机后不显示桌面图标和任务栏,鼠标可以动但是右键没反应,任务管理器能启动,该怎么解决啊?...
  19. Java解析证书内容
  20. mysql时间精确到毫秒

热门文章

  1. iPhone 6将于10月17日中国大陆发售 5288元起
  2. android 刷新布局,Android之刷新布局
  3. 土豆网我的视频不能看了,换到了优酷上,放一个上来测试一下.呵呵!
  4. 浅谈由于cmos电池故障引起的不开机
  5. Python 生成临时文件和目录 -tempfile
  6. linux返回_使用Linux返回学校
  7. 面试高潮季即将来袭,Android 开发者能否在其中鲤鱼跃龙门?
  8. Android 日历开发教程[六]
  9. POJ 2942 Knights of the Round Table 【点双联通 + 二分图染色法判奇环】
  10. 中级 | 想开发微信小游戏,先看看腾讯是如何制定规则的!