40行代码带你免费看《海贼王-和之国》篇章

喜欢看海贼王的各位童鞋们,草帽一伙已经来到和之国啦,动漫在7月7号将会进入和之国篇章啦!

想提前看和之国篇章的同学可以先看一波漫画啦!

640?wx_fmt=jpeg

说到这里我有个打算,将网站上的所有和之国篇章的漫画全都down下来,然后打印成册,但是内容太多,估计要耗不少时间吧!


一个小时怕是真的不够。


那怎么办呢?


我们可以使用爬虫啊!


只需要request和re模块,全程不到40行代码!


我们就能轻松下载海贼王所有漫画,而且,速度超快!


来来来,是不是很心动smiley_44.png


咱们开始吧!


需要准备的模块,我们可以使用pip安装管理工具进行安装以下模块。

import os
import requests
import re
import time
from urllib.request import urlretrieve



首先,漫画网址:

https://one-piece.cn/comic/

我们查看一下网站的信息

640?wx_fmt=png


我们看到和之国篇章正好id=“chapter12“,那我们的正则表达式就专门处理chapter12里面的<a>标签了。


首先制作获取chapter12里面的所有内容:


url = "https://one-piece.cn"
response = requests.get(url+"/comic")
pattern = re.compile('<div id="chapter12" class="chapter"'
'.*?<a href="(.+)" target="_blank"', re.S)
result = pattern.findall(response.text)



获取好之后在当前的结果里将漫画内容链接的页面获取过来,这时候我们要在第一次匹配的结果上再去匹配url:

pattern2 = re.compile('<a href="(.*?)"', re.S)
result = pattern2.findall(result[0])


结果:

640?wx_fmt=png


我们可以看到所有漫画的部分url已经获取到了。

这个时候我们只需要在原来url做拼接就可以了。

url = "https://one-piece.cn"
comic_page = requests.get(url + chapter)


进入这个页面之后我们要获取当前集数的所有漫画图片:

640?wx_fmt=png

我们随便选一集,来看看图片是如何获取的:


首先我们需要通过正则表达式匹配图片的URL:

我们看到规律,所有的图片都在<img>标签下,我们只需要获取标签里面的src属性里面的内容就好了。

pattern = re.compile('<img alt=".*?" src="(.*?)"', re.S)


这样一个正则表达式就能解决页面上的图片,获取内容如下:

640?wx_fmt=png


我们需要将这个图片地址转化成图片保存下来,这时候我们就需要用到urlretrieve这个方法了。

因为我们要获取当前页面上的所有图片,所以我们需要遍历下载这些图片:

for pic in range(len(com_url)):
urlretrieve(com_url[pic], './海贼王{}集/{}.jpg'.format(dir[-3], pic))

urlretrieve这个方法有两个参数,第一个是获取图片的地址,第二个是存放的路径。


这样我们整个工作就算完成了。


下面我们来看看代码吧!


import os
import requests
import re
import time
from urllib.request import urlretrieve


def get_page(url):
response = requests.get(url + "/comic")
pattern = re.compile('<div id="chapter12" class="chapter"'
'.*?<a href="(.+)" target="_blank"', re.S)
pattern2 = re.compile('<a href="(.*?)"', re.S)
result = pattern.findall(response.text)
result = pattern2.findall(result[0])
return result


def get_pic(chapter):
dir = chapter.replace("/", "")
print("url = ", url + chapter)
comic_page = requests.get(url + chapter)
pattern = re.compile('<img alt=".*?" src="(.*?)"', re.S)
com_url = pattern.findall(comic_page.text)
print(com_url)
# 创建目录
os.makedirs('./海贼王{}集/'.format(dir[-3]), exist_ok=True)
# 获取当前页面漫画上的所有图片
for pic in range(len(com_url)):
urlretrieve(com_url[pic], './海贼王{}集/{}.jpg'.format(dir[-3], pic))
print("海贼王和之国篇, 爬取第{}篇结束.....".format(dir[-3:]))


url = "https://one-piece.cn"
result = get_page(url)
print(result)
for chapter in result:
time.sleep(2)
get_pic(chapter)


640?wx_fmt=png

640?wx_fmt=png

当然如果要爬去其他章节的漫画需要将chapter改成其他数字哦,如果是要获取所有集数,那你的第一个正则表达式就需要重写啦!


大家可以点击阅读原文去github上看代码哟!



640?wx_fmt=gif

“喜欢就去GitHub上瞧瞧吧!


文章来源: blog.csdn.net,作者:敲代码的灰太狼,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/tongtongjing1765/article/details/100582072

(完)