Python爬虫-爬取快看漫画网图片并拼接成漫画长图

  • 1、爬取图片
  • 2、拼接图片

1、爬取图片

import os
import requests
from bs4 import BeautifulSoup
import re
import urllib
import timeheader = {'Referer': 'http://www.kuaikanmanhua.com/', 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.119 Safari/537.36'}
# 访问网站的头,避免被认为爬虫的基本操作
dir = "E:\\download\\pengran\\"
# 某个漫画的第一话内容,或者说是你要爬取的起始那话的链接
url = "https://www.kuaikanmanhua.com/web/comic/10950/"
# url = "https://www.kuaikanmanhua.com/web/comic/157885/"
# 爬取的漫画网站网址,作为拼接时使用
half_url = "https://www.kuaikanmanhua.com"
# 全局变量,保证自己知道
n = 1
s = requests.session()
s.headers = header# 获取图片的链接,此处的函数时获取网站图片的链接,因为设置到查找链接的条件,所以找到的链接全部都是本url的漫画图,返回的是一个图片的列表(数组)
def get_imageurl(url):a = []global shtml = s.get(url).textsoup = BeautifulSoup(html, 'html.parser')img_links = soup.select('.kklazy')for img_link in img_links:a.append(img_link['data-kksrc'])return a# 获取下一话的一半网址,因为要和该网站的网址进行拼接才可以访问。基本上就是通过正则表达式找到下一话对应的链接
def get_next(url):next = ""con = requests.get(url)content = BeautifulSoup(con.content, "lxml")li = content.find_all("ul", class_="clearfix")for i in range(len(li)):if i == 1:a = str(li[i].find_all("li")[-1])# 通过正则表达式截取相应的字符p = "\"/.+?\""pattern = re.compile(p)if len(pattern.findall(a)) == 0:print("最后!")else:next = pattern.findall(a)[0]next = str(next)[1:-1]return next# 创建保存图片的文件夹,逻辑基本上就是有则忽略,无则创建
def createpath(path):flag = TrueisExists = os.path.exists(path)if not isExists:os.makedirs(path)else:flag = Falsereturn flag# 保存图片,我们之前已经获得了一个图片的列表,所以此时我们可以访问指定的地址获取该图片并保存
def save_img(urllist, dir):global sglobal nindex = 0count = 1path = dir + "\\" + str(n)createpath(path)n += 1for i in urllist:# path = dir + "\\" + str(n)if int(index/75) >= 1:count += 1path = dir + "\\" + str(n-1) + "-" + str(count)index = 0if not os.path.exists(path): os.makedirs(path)img_name = str(index) + ".jpg"image = path + "\\" + img_nameres = s.get(i)with open(image, 'wb') as f:f.write(res.content)f.close()index += 1# time.sleep(0.2)  # 自定义延时return True# print(get_next(url))# 主函数,大家可以按照漫画的话数设置的循环,大家也可以根据是否可以获得下一话的链接来决定是否跳出循环。
if __name__ == "__main__":nurl = urlfor i in range(200):nt = get_next(nurl)if len(nt) == 0:breakif i == 0:lt = get_imageurl(url)save_img(lt, dir)else:print("nurl", nurl)nurl = half_url + ntlt = get_imageurl(nurl)save_img(lt, dir)print("保存成功!")

    关于**爬取图片**的基本上就是以上的代码了,主要的逻辑就是获取某一话网页上为**漫画图的图片链接**并保存下来,为了多爬取几话,我们还要**获取网页上的下一话的链接**,然后访问下一话继续获取链接。为了后期的拼接,我们需要把**每一话尽量分到一个文件夹**,然后保存,所以有了创建文件夹和保存的函数。代码写的时间有些长了,大概的逻辑就是这样子的。有一点需要注意的是,一话中包含的图片太多的话,在保存图片哪里是会多创建该话的文件夹的,因为后期拼接图片要求不能太长。

2、拼接图片

import os
from PIL import Image
import cv2# 定义输入的文件夹和输出的文件夹
dir = "E:\\download\\pengran\\"
sdir = "E:\\download\\xindong\\"
# 设置输出图像的宽度,当然也可以读取图像的
width = 750# 合成图片,这里需要注意的是python读取列表的顺序是否和你想要的顺序是一样的
def creat_img(path, height, width, spath):suh = 0# suw = 0imgs = [Image.open(os.path.join(path, str(i)+".jpg")) for i in range(len(os.listdir(path)))]result = Image.new(imgs[0].mode, (width, height))for i, img in enumerate(imgs):pic_path = os.path.join(path, str(i)+".jpg")im = cv2.imread(pic_path)imh = im.shape[0]result.paste(img, box=(0, suh))suh += imh# result.show()result.save(spath)# 获取要合并图片的总高度
def get_sunh(path):sum_h = 0dirlist = os.listdir(path)for i in dirlist:pic_path = os.path.join(path, i)img = cv2.imread(pic_path)img_h = img.shape[0]sum_h += img_hreturn sum_h# 好像没用到
def createpath(path):flag = TrueisExists = os.path.exists(path)if not isExists:os.makedirs(path)else:flag = Falsereturn flag# 对于某个顺序,找到其类似的文件夹
def path_list(num):pl = []for i in range(1, 5):if i == 1:path = dir + str(num)else:path = dir + str(num) + "-" + str(i)if os.path.exists(path): pl.append(path)return pl# 设置循环,分别合并图片
for i in range(1, 201):list = path_list(i)for j in list:name = j.split("\\")[-1]spath = os.path.join(sdir, str(name) + ".jpg")print(spath)height = get_sunh(j)creat_img(j, height, width, spath)

    最后的结果:数字代表第几话,“-”后面的数字是因为一话不能一次拼接,之后分批拼接。PS:不能保证一个一话的两图片分割良好,这是网站放图的原因。

    此处本应该放置一些过程的图的,但是由于这些图片挺占空间的就给删掉了,下次爬取图片的时候,我就会把这些过程的截图更新到本博客。

Python爬虫-爬取快看漫画网图片并拼接成漫画长图相关推荐

  1. 使用python爬虫爬取蓝调口琴网乐谱

    学习目标:使用python爬虫爬取蓝调口琴网乐谱 提示:这里可以添加学习目标 例如:一周掌握 Java 入门知识 学习内容: 使用爬虫爬取需要动态验证码(如手机短信验证码)登录的网站. 提示:这里可以 ...

  2. python自动爬取快看漫画并发布至头条号(没编程基础也可学会)

    一,介绍 1.简介:这是一个可以自动爬取快看漫画上的漫画,下载到本地,并自动发布到今日头条号的编程,无编程基础的人也可学会 2.学习: 1)对于学习python技术的,你可以学习python爬虫技术 ...

  3. Python爬虫爬取豆瓣TOP250和网易云歌单

    python爬虫(网易云)笔记 @(python学习) 先推荐看一下b站的视频链接如下:https://www.bilibili.com/video/BV12E411A7ZQ?from=search& ...

  4. python爬虫爬取王者荣耀官网全部英雄头像(源码分享)

    这篇文章为源码分享,爬虫的分析过程请阅读文章 <用python爬取王者荣耀官网的英雄皮肤海报(含源码)> 源码 import requests import json from bs4 i ...

  5. python爬虫爬取王者荣耀官网全部装备图片(源码分享)

    这篇文章为源码分享,爬虫的分析过程请阅读文章 <用python爬取王者荣耀官网的英雄皮肤海报(含源码)> 源码 import requests from bs4 import Beauti ...

  6. python爬虫爬取Boss直聘网招聘信息

    学校给我们大三同学找了一个培训组织,做了10天的实训,我学习的是python,最后是以一个爬虫程序为结业作业,就着这个实训,顺便发一个博客记录一下.考虑到我们即将就业,所以准备爬一个招聘网站,最终决定 ...

  7. python爬虫兼职-python爬虫爬取拉勾招聘网

    # -*- coding: utf-8 -*- """ Created on Mon Sep 7 21:44:39 2020 @author: ASUS "&q ...

  8. python爬虫——爬取快读小说app

    1. 爬取结果(csv文件,出现了有两个表头-不明所以,无关大雅) 2. 使用fiddler4进行抓包 通过观察url,我们不难发现其中的规律,要实现进行分类抓取,需要更改url第一个数字,如下 ht ...

  9. python爬虫:爬取多页斗鱼颜值图片 并且下载到本地

    项目结构 main.py 运行scrapy from scrapy import cmdline cmdline.execute("scrapy crawl douyu_scrapy&quo ...

最新文章

  1. git 提交丢失Warning, you are leaving 2 commits behind,
  2. myeclipse定位代码文件位置
  3. input自适应_一种Dynamic ReLU:自适应参数化ReLU(调参记录26)Cifar10~95.92%
  4. quantrader和matlab不匹配,【Matlab量化投资】支持向量机择时策略
  5. 成员函数 静态变量做默认参数_Scala系列 (二)Scala的独有特性提高开发效率学会之后玩转函数式与OOP!!...
  6. 屏幕滑动_Appium滑动引导页swipe函数
  7. unicode转中文的工具
  8. php获取控制器返回,thinkphp获取所有控制器的方法
  9. 很火的深度学习框架PyTorch怎么用?手把手带你安装配置
  10. 运用网络管理工具主动纠错
  11. 对于HTTP过程中POST内容加密的解决方案
  12. vue父组件引用子组件方法显示undefined问题原因及解决方法
  13. Java 异常类层次结构
  14. vb 获取设备音量_自制 Windows 10X 启动盘,提前体验微软折叠设备新系统
  15. 怎么修改计算机日志里的用户,修改电脑日志保存位置的方法
  16. Python基础语法知识2
  17. 模型参考自适应控制器(MRAC)系列: 2.提升瞬态性能
  18. 解决“ssh服务器拒绝了密码 请再试一次”问题
  19. 宿华辞任快手CEO、程一笑接任;百世将国内快递业务68亿元出售给极兔|美通社头条...
  20. dci odbc mysql_人大金仓-

热门文章

  1. 【GA算法】遗传算法原理及其Matlab代码
  2. R读取外部设备数据(剪切板/txt/xls/csv)
  3. 互融云借条APP系统开发 六大系统优势全面保障
  4. Mac上最好用的BT下载工具——Folx
  5. stm32F103采用内部晶振8MHz时钟和外部晶振初始化代码
  6. MySQL笔记之MySQL简单介绍及DQL语言
  7. 损失函数和评价指标的一些理解
  8. java.util.set cannot be assigned from null_JDK源码那些事儿之浅析Thread下篇
  9. ZeroTier-One配置moon心得
  10. 使用Zerotier+Moon结点内网穿透