基于Python实现ComicReaper漫画自动爬取脚本过程解析
这篇文章主要介绍了基于Python实现ComicReaper漫画自动爬取脚本过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
讲真的,手机看漫画翻页总是会手残碰到页面上的广告好吧...
要是能只需要指定一本漫画的主页URL就能给我返回整本漫画就好了...
这促使我产生了使用Python3来实现,做一个ComicReaper(漫画收割者)的想法!
本文所用漫画链接: http://www.manhuadb.com/manhua/2317
总体流程
那就开始吧
做一些准备工作
先用字符串存储两个链接,一个是本次漫画网站站点的域名URL,另一个是当前我们要爬取的漫画的主页URL
再定义一个header字典,用于存储我们的User-Agent和RefererReferrer(由于早期HTTP规范的拼写错误,为了保持向后兼容就将错就错了)
首部字段User-Agent
首部字段User-Agent告诉服务器当前创建请求的浏览器是什么(有的网站会针对不同的浏览器提供不同的页面,比如如果是手机浏览器提出的请求,服务器就向客户端提供网站的手机版页面)
比如说同样是请求GitHub的主页,左边是使用笔记本电脑上面的浏览器请求的页面,右边是在安卓手机上请求的页面
首部字段Referer
首部字段Referer告诉服务器当前请求的页面是从哪个Web页面发起的(一般情况下Referer字段用于防盗链)
有的网站不允许直接访问网站里面的URL,只能通过从主页点击某个链接来进行跳转,或者...我们在请求之前把User-Agent字段设置为主页或发起页即可
url_domainame=r'http://www.manhuadb.com' url_host=r'http://www.manhuadb.com/manhua/2317' header={ 'User-Agent':'Mozilla/5.0(WindowsNT10.0;Win64;x64;rv:70.0)Gecko/20100101Firefox/70.0', 'Referer':'' }
获取章节目录
首先我们对我们接下来要做的事情做一个具体流程分析
我们要获取当前漫画所有章节的标题与URL(标题用于后期存储时文件夹的命名,URL用于跳转到当前章节的开始页面)并且存储在列表中
将会使用到Python的两个库,re与urllib
importre#导入正则表达式 importurllib.request#导入urllib.request
对在浏览器中按下[F12]键打开开发者工具来对漫画的章节页面进行分析
我们可以看到页面中有很多章节,也就是章节跳转链接,每个链接的标签中正好具有我们需要的标题和URL,分别是标签的title属性与href属性,我们将使用字典来存储它
先不慌着前进,考虑到整个HTML中有非常多的链接,那么也就意味着页面中具有大量的标签,如果我们只是单纯地从HTML中过滤出标签,这样我们会得到大量我们并不需要的标签,这是不明智的,我们必须只过滤出章节跳转链接的标签,仔细观察,发现章节跳转链接的标签们都具有一个特点,那就是它们都具有class属性并且属性值为"fixed-a-es",这就找到了一个可以定位章节标签的依据,把这一点加入到我们的正则表达式的匹配规则中去
现在就可以定义一个正则表达式匹配字符串了:
pat=r'为什么要这么写:
- 在Python中,在字符串常量的开头加一个'r'表示本字符串中的'\'字符将不会用来作转义字符使用,保留了它原本的含义,也就是反斜杠字符
- 在正则表达式中,'.'字符用于匹配任何字符(当匹配时具有're.S'标志时此话成立,否则只能匹配任意但除了'\n'以外的字符)
- 在正则表达式中,'*'字符用于描述它左边的匹配字符的出现次数为0次或若干次
- 在正则表达式中,'(.*?)'的组合用来表示一个贪婪匹配(并且会被捕捉到)
使用这个正则表达式,就可以匹配到title属性与href属性的属性值中的双引号里面的内容了
具体实现是chapterIndexReaper函数,主要用来"收割"当前漫画的所有章节并存储为字典列表
代码如下:
#获取一本漫画的所有章节的目录 defchapterIndexReaper(url_host,header): #定义一个临时字典,用于临时存储一个章节的标题与url dic_temp={ 'Title':'', 'Url':'' } #章节字典列表,存储当前漫画的所有章节字典 set_dic=[] #构建Request对象 req=urllib.request.Request(url=url_host,headers=header) #读取所请求的req并用utf-8编码来进行解码,所得到的的字符串赋值给html html=urllib.request.urlopen(req).read().decode('utf-8') #爬取漫画章节标题与url的正则表达式 pat=r'以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。