基于Python实现的ComicReaper漫画自动爬取脚本

讲真的, 手机看漫画翻页总是会手残碰到页面上的广告好吧...

要是能只需要指定一本漫画的主页URL就能给我返回整本漫画就好了...

还是使用Python来实现, 取个名字...就叫 ComicReaper(漫画收割者) 吧!

首先我们对我们接下来要做的事情做一个具体流程分析

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

将会使用到Python的两个库, reurllib

1 import re         # 导入正则表达式
2 import urllib.request   # 导入 urllib.request

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

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

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

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

pat = r‘<a class="fixed-a-es" href="(.*?)" title="(.*?)"‘

为什么要这么写 :

  1. 在Python中, 在字符串常量的开头加一个 ‘r‘ 表示本字符串中的 ‘\‘ 字符将不会用来作转义字符使用, 保留了它原本的含义, 也就是反斜杠字符
  2. 在正则表达式中, ‘.‘ 字符用于匹配任何字符(当匹配时具有 ‘re.S‘ 标志时此话成立, 否则只能匹配任意但除了 ‘\n‘ 以外的字符)
  3. 在正则表达式中, ‘*‘ 字符用于描述它左边的匹配字符的出现次数为0次或若干次
  4. 在正则表达式中, ‘(.*?)‘ 的组合用来表示一个贪婪匹配(并且会被捕捉到), 至于什么是贪婪匹配, 可以看这位博主的这篇文章

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

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

代码如下 :

 1 #获取一本漫画的所有章节的目录
 2 def chapterIndexReaper(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‘<a class="fixed-a-es" href="(.*?)" title="(.*?)"‘
16     # 使用pat在html中进行进行匹配(re.S参数是为了让"."除了能够匹配本身规定的字符,
17     # 另外也能匹配"\n"), 返回一个结果列表res
18     res = re.findall(pat, html, re.S)
19     for i in res:
20         dic_temp[‘Title‘] = i[1]
21         dic_temp[‘Url‘] = url_head + i[0]
22         # 向当前的章节字典列表的后面追加新的章节, 注意, 此处要使用浅拷贝
23         # (因为dic_temp是一个临时变量, 需要创建它的副本并追加到set_dic中去,
24         # 否则当dic_temp刷新时set_dic中的元素会相应发生改变)
25         set_dic.append(dic_temp.copy())
26     return set_dic

原文地址:https://www.cnblogs.com/Laplacedoge/p/11828622.html

时间: 2024-11-08 03:38:57

基于Python实现的ComicReaper漫画自动爬取脚本的相关文章

2019基于python的网络爬虫系列,爬取糗事百科

**因为糗事百科的URL改变,正则表达式也发生了改变,导致了网上许多的代码不能使用,所以写下了这一篇博客,希望对大家有所帮助,谢谢!** 废话不多说,直接上代码. 为了方便提取数据,我用的是beautifulsoup库和requests ![使用requests和bs4](https://img-blog.csdnimg.cn/20191017093920758.png) ``## 具体代码如下 ```import requestsfrom bs4 import BeautifulSoup de

python网络爬虫之使用scrapy自动爬取多个网页

前面介绍的scrapy爬虫只能爬取单个网页.如果我们想爬取多个网页.比如网上的小说该如何如何操作呢.比如下面的这样的结构.是小说的第一篇.可以点击返回目录还是下一页 对应的网页代码: 我们再看进入后面章节的网页,可以看到增加了上一页 对应的网页代码: 通过对比上面的网页代码可以看到. 上一页,目录,下一页的网页代码都在<div>下的<a>元素的href里面.不同的是第一章只有2个<a>元素,从二章开始就有3个<a>元素.因此我们可以通过<div>

【转】 Scrapy研究探索(六)——自动爬取网页之II(CrawlSpider)

转自http://blog.csdn.net/u012150179/article/details/34913315 一.目的. 在教程(二)(http://blog.csdn.net/u012150179/article/details/32911511)中使用基于Spider实现了自己的w3cschool_spider,并在items.py中定义了数据结构, 在pipelines.py中实现获得数据的过滤以及保存. 但是以上述方法只能爬取start_url列表中的网页,而网络爬虫如googl

Scrapy精华教程(六)——自动爬取网页之II(CrawlSpider)

一.目的. 在教程(二)(http://blog.csdn.net/u012150179/article/details/32911511)中使用基于Spider实现了自己的w3cschool_spider,并在items.py中定义了数据结构, 在pipelines.py中实现获得数据的过滤以及保存. 但是以上述方法只能爬取start_url列表中的网页,而网络爬虫如google等搜索引擎爬虫实现的就是对整个互联网的爬取,所以在本教程中研究使用scrapy自动实现多网页爬取功能. 在教程(五)

【python爬虫】根据查询词爬取网站返回结果

最近在做语义方面的问题,需要反义词.就在网上找反义词大全之类的,但是大多不全,没有我想要的.然后就找相关的网站,发现了http://fanyici.xpcha.com/5f7x868lizu.html,还行能把"老师"-"学生","医生"-"病人"这样对立关系的反义词查出来. 一开始我想把网站中数据库中存在的所有的词语都爬出来(暗网爬虫),但是分析了url的特点: http://fanyici.xpcha.com/5f7x86

python爬虫实例详细介绍之爬取大众点评的数据

python 爬虫实例详细介绍之爬取大众点评的数据 一. Python作为一种语法简洁.面向对象的解释性语言,其便捷性.容易上手性受到众多程序员的青睐,基于python的包也越来越多,使得python能够帮助我们实现越来越多的功能.本文主要介绍如何利用python进行网站数据的抓取工作.我看到过利用c++和Java进行爬虫的代码,c++的代码很复杂,而且可读性.可理解性较低,不易上手,一般是那些高手用来写着玩加深对c++的理解的,这条路目前对我们不通.Java的可读性还可以,就是代码冗余比较多,

26、自动爬取每日的天气,并定时把天气数据和穿衣提示发送到你的邮箱

自动爬取每日的天气,并定时把天气数据和穿衣提示发送到你的邮箱. 之所以选择这个相对朴实的爬虫项目,是因为天气每天都会有变化,那么在学完这一关之后,不出意外,你就可以在明早收到天气信息了.以此,亲身体验程序的作用. 你还可以把每日的天气和温馨的穿衣提示发送到你的恋人.家人.或朋友的邮箱里,这也是传递心意的一种方式. 总体上来说,可以把这个程序分成三个功能块:[爬虫]+[邮件]+[定时] 1 import requests 2 import time 3 import schedule 4 from

27、周末吃什么(每周五自动爬取下厨房本周最受欢迎的菜谱)

在之前吴氏私厨的基础上,每周五自动爬取下厨房本周最受欢迎的菜谱 1 import requests 2 import time 3 import schedule 4 import smtplib 5 from email.mime.text import MIMEText 6 from email.header import Header 7 from bs4 import BeautifulSoup 8 9 def caipu_fun(): 10 res = requests.get('ht

Python工具 | 9个用来爬取网络站点的 Python 库

1??Scrapy 一个开源和协作框架,用于从网站中提取所需的数据. 以快速,简单,可扩展的方式. 官网 2??cola 一个分布式爬虫框架. GitHub 3??Demiurge 基于 PyQuery 的爬虫微型框架. 官网 4??feedparser 通用 feed 解析器. 官网 5??Grab Grab 是一个用于构建 Web scraper 的 python 框架. 使用 Grab,您可以构建各种复杂性的 Web scraper,从简单的5行脚本到处理数百万个 Web 页面的复杂异步网