喜欢看海贼王的各位童鞋们,草帽一伙已经来到和之国啦,动漫在7月7号将会进入和之国篇章啦!
想提前看和之国篇章的同学可以先看一波漫画啦!
说到这里我有个打算,将网站上的所有和之国篇章的漫画全都down下来,然后打印成册,但是内容太多,估计要耗不少时间吧!
一个小时怕是真的不够。。。。。
那怎么办呢?
我们可以使用爬虫啊!
只需要request和re模块,全程不到40行代码!
我们就能轻松下载海贼王所有漫画,而且,速度超快!
来来来,是不是很心动?
咱们开始吧!
需要准备的模块,我们可以使用pip安装管理工具进行安装以下模块。
import os
import requests
import re
import time
from urllib.request import urlretrieve
首先,漫画网址:
https://one-piece.cn/comic/
我们查看一下网站的信息
我们看到和之国篇章正好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])
结果:
我们可以看到所有漫画的部分url已经获取到了。
这个时候我们只需要在原来url做拼接就可以了。
url = "https://one-piece.cn"
comic_page = requests.get(url + chapter)
进入这个页面之后我们要获取当前集数的所有漫画图片:
我们随便选一集,来看看图片是如何获取的:
首先我们需要通过正则表达式匹配图片的URL:
我们看到规律,所有的图片都在<img>标签下,我们只需要获取标签里面的src属性里面的内容就好了。
pattern = re.compile('<img alt=".*?" src="(.*?)"', re.S)
这样一个正则表达式就能解决页面上的图片,获取内容如下:
我们需要将这个图片地址转化成图片保存下来,这时候我们就需要用到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)
当然如果要爬去其他章节的漫画需要将chapter改成其他数字哦,如果是要获取所有集数,那你的第一个正则表达式就需要重写啦!
大家可以点击阅读原文去github上看代码哟!
“喜欢就去GitHub上瞧瞧吧!”
文章来源: blog.csdn.net,作者:敲代码的灰太狼,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/tongtongjing1765/article/details/100582072