Python爬虫 JS案例分析:爬取鬼灭之刃漫

2023-10-31 08:20

本文主要是介绍Python爬虫 JS案例分析:爬取鬼灭之刃漫,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理。

文章转载于公众号:快学Python

作者:皖渝

猪油骨,拿来卤~今天,来分享一下python图片爬取+简单JS分析

爬取网址:漫画地址(这个网站只更新到188话,实际上已经有200多话了)

一、获取所有章节URL地址

打开网址后,使用Chrome抓包,发现所有章节的数据如下所示:

def get_html(url):r=requests.get(url,headers=header)r.encoding='gbk'if r.status_code==200:return r.textexcept:print('网络连接异常')def get_total_chapter():data=json.loads(get_html(url))chapter_total=data['Comics'][2]['Chapters']for item in chapter_total:yield item.get('Url')

 

二、解析图片地址,进行简单JS解密

点击进入第一话后,分析网页源码,发现图片保存在a标签下的img中,但是需要爬取的src是用javascript写的!这个时候直接用lxml库去解析是拿不到图片的。这里,我们先分析图片链接的组成,用正则把提取出来即可。

src='"+m201304d+"newkuku/2016/02/15/鬼灭之刃][第1话/JOJO_001513.jpg'

其中,m201304是加密的部分,这个网站比较简单,直接找到js4.js文件,即可发现m201304对应的是http://v2.kukudm.com/,除此之外还有三个加密码,我们可以构建成列表,用if判断是否含如下加密码,再用replace替换即可。

三、翻页分析

分析URL可知,第一话共54页,通过改变末尾的/number.html即可实现翻页

全部代码

所有图片都放在桌面的comic文件夹

import requests
import json
import os
import re
import time
os.chdir('C:/Users/dell/Desktop/comic')
url='https://api.soman.com/soman.ashx?action=getsomancomicdetail&comicname=%E9%AC%BC%E7%81%AD%E4%B9%8B%E5%88%83&source=kuku%E5%8A%A8%E6%BC%AB'
header={'user-agent':"Opera/9.80 (Windows NT 6.0; U; en) Presto/2.8.99 Version/11.10"}def get_html(url):r=requests.get(url,headers=header,timeout=5)r.encoding='gbk'if r.status_code==200:return r.textelse:print('网络连接异常')def get_total_chapter():data=json.loads(get_html(url))chapter_total=data['Comics'][2]['Chapters']for item in chapter_total:yield item.get('Url')def save_items(url,count):r=requests.get(url,headers=header,timeout=5)with open('./第{}话/'.format(count)+str(int(time.time()))+'.jpg','wb') as f:f.write(r.content)def get_all_img():  #得到每话总图片数src_list=["m200911d","m201001d","m201304d","k0910k"]count=0for chapter in get_total_chapter():try:count+=1os.makedirs('./第{}话'.format(count))pat='共(.*?)页'total_page=re.search(pat,get_html(chapter)).group(1)for page in range(1,int(total_page)+1):pat1='<IMG SRC=(.*)></a>'src=re.search(pat1,get_html(chapter)).group(1)for item in src_list:if item in src_list:src=src.replace("+"+item+"+",'http://v2.kukudm.com/').replace('"','')            save_items(eval(src),count)print('第{}话第{}页爬取完成'.format(count,page))now_page=re.search('.*/(.*)\.htm',chapter).group(1)chapter=chapter.replace(str(now_page)+'.htm',str(page+1)+'.htm')except:print('未爬取到数据')
if __name__=='__main__':get_all_img()

最终爬取的漫画如下(这里仅作示例,只爬取了前10话的内容):

这篇关于Python爬虫 JS案例分析:爬取鬼灭之刃漫的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/314018

相关文章

Python将博客内容html导出为Markdown格式

《Python将博客内容html导出为Markdown格式》Python将博客内容html导出为Markdown格式,通过博客url地址抓取文章,分析并提取出文章标题和内容,将内容构建成html,再转... 目录一、为什么要搞?二、准备如何搞?三、说搞咱就搞!抓取文章提取内容构建html转存markdown

Python获取中国节假日数据记录入JSON文件

《Python获取中国节假日数据记录入JSON文件》项目系统内置的日历应用为了提升用户体验,特别设置了在调休日期显示“休”的UI图标功能,那么问题是这些调休数据从哪里来呢?我尝试一种更为智能的方法:P... 目录节假日数据获取存入jsON文件节假日数据读取封装完整代码项目系统内置的日历应用为了提升用户体验,

Go标准库常见错误分析和解决办法

《Go标准库常见错误分析和解决办法》Go语言的标准库为开发者提供了丰富且高效的工具,涵盖了从网络编程到文件操作等各个方面,然而,标准库虽好,使用不当却可能适得其反,正所谓工欲善其事,必先利其器,本文将... 目录1. 使用了错误的time.Duration2. time.After导致的内存泄漏3. jsO

Python FastAPI+Celery+RabbitMQ实现分布式图片水印处理系统

《PythonFastAPI+Celery+RabbitMQ实现分布式图片水印处理系统》这篇文章主要为大家详细介绍了PythonFastAPI如何结合Celery以及RabbitMQ实现简单的分布式... 实现思路FastAPI 服务器Celery 任务队列RabbitMQ 作为消息代理定时任务处理完整

Python Websockets库的使用指南

《PythonWebsockets库的使用指南》pythonwebsockets库是一个用于创建WebSocket服务器和客户端的Python库,它提供了一种简单的方式来实现实时通信,支持异步和同步... 目录一、WebSocket 简介二、python 的 websockets 库安装三、完整代码示例1.

揭秘Python Socket网络编程的7种硬核用法

《揭秘PythonSocket网络编程的7种硬核用法》Socket不仅能做聊天室,还能干一大堆硬核操作,这篇文章就带大家看看Python网络编程的7种超实用玩法,感兴趣的小伙伴可以跟随小编一起... 目录1.端口扫描器:探测开放端口2.简易 HTTP 服务器:10 秒搭个网页3.局域网游戏:多人联机对战4.

springboot循环依赖问题案例代码及解决办法

《springboot循环依赖问题案例代码及解决办法》在SpringBoot中,如果两个或多个Bean之间存在循环依赖(即BeanA依赖BeanB,而BeanB又依赖BeanA),会导致Spring的... 目录1. 什么是循环依赖?2. 循环依赖的场景案例3. 解决循环依赖的常见方法方法 1:使用 @La

使用Python实现快速搭建本地HTTP服务器

《使用Python实现快速搭建本地HTTP服务器》:本文主要介绍如何使用Python快速搭建本地HTTP服务器,轻松实现一键HTTP文件共享,同时结合二维码技术,让访问更简单,感兴趣的小伙伴可以了... 目录1. 概述2. 快速搭建 HTTP 文件共享服务2.1 核心思路2.2 代码实现2.3 代码解读3.

Python使用自带的base64库进行base64编码和解码

《Python使用自带的base64库进行base64编码和解码》在Python中,处理数据的编码和解码是数据传输和存储中非常普遍的需求,其中,Base64是一种常用的编码方案,本文我将详细介绍如何使... 目录引言使用python的base64库进行编码和解码编码函数解码函数Base64编码的应用场景注意

用js控制视频播放进度基本示例代码

《用js控制视频播放进度基本示例代码》写前端的时候,很多的时候是需要支持要网页视频播放的功能,下面这篇文章主要给大家介绍了关于用js控制视频播放进度的相关资料,文中通过代码介绍的非常详细,需要的朋友可... 目录前言html部分:JavaScript部分:注意:总结前言在javascript中控制视频播放