转载请注明来源, 原文链接 :

讲真的, 手机看漫画翻页总是会手残碰到页面上的广告好吧, 再碰上站点的带宽还很低, 无疑是雪上加霜, 要是指定漫画的主页URL就能给我返回整本漫画的所有图片并且整理好存放在指定目录就好了...

这促使我产生了使用Python 3来实现, 做一个 ComicReaper(漫画收割者) 的想法!

总体流程

那就开始吧

做一些准备工作

导入将会使用到Python的两个库, re 与 urllib

1 #导入正则表达式

2 importre3 #导入 urllib.request

4 import urllib.request

先用字符串存储两个链接, 一个是本次漫画网站站点的域名URL, 另一个是当前我们要爬取的漫画主页URL

再定义一个 header 字典, 用于存储我们的 User-Agent 和 Referer Referrer (由于早期HTTP规范的拼写错误, 为了保持向后兼容就将错就错了)

1 url_domainame = r'https://www.manhuadb.com'

2 url_host = r'https://www.manhuadb.com/manhua/2317'

3 header ={4 'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:70.0) Gecko/20100101 Firefox/70.0',5 'Referer' : ''

6 }

首部字段 User-Agent

首部字段 User-Agent 告诉服务器当前创建请求的浏览器是什么(有的网站会针对不同的浏览器提供不同的页面, 比如如果是手机浏览器提出的请求, 服务器就向客户端提供网站的手机版页面)

比如说同样是请求 GitHub 的主页, 左边是使用笔记本电脑浏览器请求的页面, 右边是在安卓手机上请求的

首部字段 Referer

首部字段 Referer 告诉服务器当前请求的页面是从哪个Web页面发起的(一般情况下 Referer 字段用于防盗链)

有的网站不允许直接访问站内的URL, 只能通过从主页点击链接来进行跳转, 或者...我们在请求之前构建请求头把 User-Agent 字段设置为主页或发起页即可

获取章节目录

一次性获取所有的章节信息将会是一个不错的选择, 因为发起一次请求的代价很高(当网速较慢或者网站带宽较低时, 延时很高)

我们要获取当前漫画所有章节的标题与URL(标题用于后期存储时文件夹的命名, URL用于跳转到当前章节的开始页面)并且打包成字典存储在列表中

对在浏览器中按下 [F12]键打开开发者工具来对漫画的章节页面进行分析

我们可以看到页面中有很多章节, 也就是章节跳转链接, 每个链接的标签中正好具有我们需要的标题和URL, 分别是标签的 title 属性与href 属性, 我们将使用字典来存储它

先不慌着前进, 考虑到整个HTML中有非常多的链接, 那么也就意味着页面中具有大量的标签, 如果我们只是单纯地从HTML中过滤出标签, 这样我们会得到大量我们并不需要的标签, 这是不明智的, 我们必须只过滤出章节跳转链接的标签, 仔细观察, 发现章节跳转链接的标签们都具有一个特点, 那就是它们都具有 class 属性并且属性值为 "fixed-a-es" , 这就找到了一个可以定位章节标签的依据, 把这一点加入到我们的正则表达式的匹配规则中去

现在就可以定义一个正则表达式匹配字符串了(什么是正则表达式?)(在线正则表达式练习) :

pat = r'

为什么要这么写 :

在Python中, 在字符串常量的开头加一个 'r' 表示本字符串中的 '\' 字符将不会用来作转义字符使用, 保留了它原本的含义, 也就是反斜杠字符

在正则表达式中, '.' 字符用于匹配任何字符(当匹配时具有 're.S' 标志时此话成立, 否则只能匹配任意但除了 '\n' 以外的字符)

在正则表达式中, '*' 字符用于描述它左边的匹配字符的出现次数为0次或若干次

在正则表达式中, '(.*?)' 的组合用来表示一个贪婪匹配(并且会被捕捉到), 至于什么是贪婪匹配, 可以看这位博主的这篇文章

使用这个正则表达式, 就可以匹配到 title 属性与 href 属性的属性值中的双引号里面的内容了

具体实现是 chapterIndexReaper 函数, 主要用来"收割"当前漫画的所有章节并存储为字典列表

代码如下 :

1 #获取一本漫画的所有章节的目录

2 defchapterIndexReaper(url_host, header):3 #定义一个临时字典, 用于临时存储一个章节的标题与url

4 dic_temp ={5 'Title' : '',6 'Url' : ''

7 }8 #章节字典列表, 存储当前漫画的所有章节字典

9 set_dic =[]10 #构建Request对象

11 req = urllib.request.Request(url = url_host, headers =header)12 #读取所请求的req并用utf-8编码来进行解码, 所得到的的字符串赋值给html

13 html = urllib.request.urlopen(req).read().decode('utf-8')14 #爬取漫画章节标题与url的正则表达式

15 pat = r'

python漫画滤镜怎么实现的_基于Python实现的ComicReaper漫画自动爬取脚本相关推荐

  1. python获取app信息的库_基于Python的模拟登陆获取脉脉好友信息

    代码已经上传到github上 简介: 这是一个基于python3而写的爬虫,爬取的网站的脉脉网(https://maimai.cn/),在搜索框中搜索"CHO",并切换到" ...

  2. python中numpy数组的合并_基于Python中numpy数组的合并实例讲解

    基于Python中numpy数组的合并实例讲解 Python中numpy数组的合并有很多方法,如 - np.append() - np.concatenate() - np.stack() - np. ...

  3. python版植物大战僵尸源码_基于python的植物大战僵尸游戏设计与实现.docx

    湖南理工学院毕业设计(论文) PAGE PAGE 1 学 号 毕业设计(论文) 题目:基于python的植物大战僵尸游戏设计与实现 作 者 届 别 届 院 别 信息与通信工程学院 专 业 信息工程 指 ...

  4. python中sample是什么意思_基于Python中random.sample()的替代方案

    python中random.sample()方法可以随机地从指定列表中提取出N个不同的元素,但在实践中发现,当N的值比较大的时候,该方法执行速度很慢,如: numpy random模块中的choice ...

  5. python扫雷的代码及原理_基于Python实现的扫雷游戏实例代码

    摘要:这篇Python开发技术栏目下的"基于Python实现的扫雷游戏实例代码",介绍的技术点是"Python实现.Python.实例代码.扫雷游戏.扫雷.游戏" ...

  6. python的图书管理项目教程_基于python图书馆管理系统设计实例详解

    写完这个项目后,导师说这个你完全可以当作毕业项目使用了,写的很全,很多的都设计考虑周全,但我的脚步绝不止于现在,我想要的是星辰大海!与君共勉! 这个项目不是我的作业, 只是无意中被拉进来了,然后就承担 ...

  7. 基于python的智能安防系统_基于Python语言的智能家居系统研究

    龙源期刊网 http://www.qikan.com.cn 基于 Python 语言的智能家居系统研究 作者:张微微

  8. python关于二手房的课程论文_基于python爬取链家二手房信息代码示例

    基本环境配置 python 3.6 pycharm requests parsel time 相关模块pip安装即可 确定目标网页数据 哦豁,这个价格..................看到都觉得脑阔 ...

  9. python实现空气质量提醒程序_基于Python实现空气质量指数可视化

    前面我们已经爬取了全国城市空气质量数据( 基于Python实现城市空气质量爬取 ),基于之前我们爬取的数据,本文将使用Python将空气质量最好的前20个城市以柱状图的形式展示出来,点击对应的柱状图能 ...

最新文章

  1. php根据循环条件切换图片,thinkphp 循环显示图片问题!!!~~~~
  2. 中秋佳节,这个网络安全 7 年经验的大佬来发福利了!
  3. shell编程之case语句及函数
  4. c语言扑克牌随机发三张牌,扑克牌发三张概率组合一副扑克牌52张(不含大、小王),发三张牌,一共多少种组合.另外:1)三张中含一对的组合有多少张?(...
  5. 用gSOAP开发Web Service程序
  6. SEO行业的路上没有捷径
  7. 支持向量机回归_机器学习系列17:支持向量机
  8. android 内存分析工具_Android Camera内存问题剖析
  9. java怎么释放分配的内存,linux 内存的分配和释放,linux分配释放
  10. docker中使用idea部署运行项目(项目以镜像方式运行)
  11. BOW( opencv源码)
  12. java正则表达式 手机_Java正则表达式
  13. 《第四部分-练习题:微信朋友圈、支付宝支付功能测试点》
  14. LineRenderer组件
  15. 谭浩强-习题6.10
  16. VMware16安装MacOS【详细教程】
  17. python opencv设置不同的视频编解码器参数
  18. 【无标题】残余应力 conception
  19. FigDraw 14. SCI 文章绘图之和弦图及文章复现(Chord Diagram)
  20. 二进制转BCD码模块

热门文章

  1. 【原创】新韭菜日记35--20190313 第一次没满仓,试试定力,另外第一次开始技术分析选股和买卖
  2. unifiedremote 手机遥控器
  3. 数据挖掘课笔记(八)
  4. python如何添加行号_Tkinter向文本widg添加行号
  5. 关键是,你现在准备做什么?你能坚持多久?
  6. 公安部A级通缉令通缉的犯罪嫌疑人魏加裴被抓
  7. 【神经网络与深度学习】第一章 使用神经网络来识别手写数字
  8. 零基础能学好UI设计吗 相关学习规划是什么
  9. 川大c程序设计语言1在线作业,川大《C语言程序设计0008》19春在线作业1
  10. Ubuntu 18.04 查看显示器信息