漫画爬虫

本文介绍了如何使用爬虫技术抓取漫画网页的内容,清除无关信息,并将每一话的图片整合到单独的页面上,实现漫画阅读的便捷体验。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

import requests
import flask
#############################################
def 打开漫画(漫画目录网址):
    目录页面=requests.get(漫画目录网址)
    目录页面.encoding="utf-8"
    目录=[]
    开始关键词='<div class="chapter-body clearfix">'
    a1=目录页面.text.find(开始关键词)+len(开始关键词)
    a=a1
    z=目录页面.text.find('</div>',a)
    print(目录页面.text)
    while a<z and a>=a1:
        b=目录页面.text.find('href="',a)+len('href="')
        c=目录页面.text.find('"',b)
        d=目录页面.text.find('<span>',c)+len('<span>')
        a=目录页面.text.find('<',d)
        print(目录页面.text[b:c],目录页面.text[d:a])
        目录.append([目录页面.text[b:c],目录页面.text[d:a]])
    return 目录
def 打开目录(目录链接):
    目录=[]
    目录页面=requests.get(目录链接)
    目录页面.encoding="utf8"
    开始关键词='按剧情'
    a=目录页面.text.find(开始关键词)+len(开始关键词)
    z=目录页面.text.find('</div',a)
    while a<z and a!=-1:
        b=目录页面.text.find('<li>',a)
        c=目录页面.text.find('href="',b)+len('href="')
        d=目录页面.text.find('"',c)
        e=目录页面.text.find('<',d)
        a=目录页面.text.find('</li>',e)
        #print(目录页面.text[c:d],目录页面.text[d+2:e])
        目录.append([目录页面.text[c:d],目录页面.text[d+2:e]])
    开始关键词='<div id="w1" class="">'
    a1=目录页面.text.find(开始关键词)+len(开始关键词)
    a=a1
    z=目录页面.text.find('</div>',a)
    while a<z and a>=a1:
        d=目录页面.text.find('title="',a)+len('title="')
        e=目录页面.text.find('"',d)
        f=目录页面.text.find('<img src="',e)+len('<img src="')
        a=目录页面.text.find('"',f)
        b=目录页面.text.find('href="',a)+len('href="')
        c=目录页面.text.find('"',b)
        #print(a,目录页面.text[b:c],目录页面.text[d:e],目录页面.text[f:a])
        目录.append([目录页面.text[b:c],目录页面.text[d:e],目录页面.text[f:a]])
    开始关键词='pagination'
    a1=目录页面.text.find(开始关键词)+len(开始关键词)
    a=a1
    z=目录页面.text.find('</div>',a)
    while a<z and a>=a1:
        b=目录页面.text.find('href="',a)+len('href="')
        c=目录页面.text.find('"',b)
        d=目录页面.text.find('>',c)+1
        a=目录页面.text.find('<',d)
        #print(目录页面.text[b:c],目录页面.text[d:a])
        目录.append([目录页面.text[b:c],目录页面.text[d:a]])
    return 目录
def 获取图片链接(page,目录):
    漫画网页=requests.get("https://www.36mh.com/"+目录[page][0])
    漫画网页.encoding="utf-8"
    b=漫画网页.text.find('chapterImages = [')+len('chapterImages = [')
    c=漫画网页.text.find("]",b+1)
    d=漫画网页.text.find('chapterPath = "')+len('chapterPath = "')
    e=漫画网页.text.find('"',d+1)
    图片路径="https://img001.yayxcc.com/"+ 漫画网页.text[d:e]
    漫画图片=漫画网页.text[b:c].split(',')
    图片链接=[]
    for x in range(len(漫画图片)):
        图片链接.append(图片路径+漫画图片[x][1:-1])
    return 图片链接
app=flask.Flask(__name__)
@app.route('/<manhua>')
def page(manhua):
    if(manhua==''):
        manhua='list'
    目录=打开目录('https://www.36mh.com/'+manhua)
    网页=""
    for x in range(len(目录)):
        if len(目录[x])==2:
            网页+=' <a href="{}">{}</a> '.format(目录[x][0][:-1],目录[x][1])
        elif len(目录[x])==3:
            网页+='<br><a href="{}"><img src="{}">{}</a>'.format(目录[x][0][目录[x][0].find('.com/')+4:-1],目录[x][2],目录[x][1])
        else:
            pass
    return 网页
@app.route('/')
def index():
    return page('list')
@app.route('/<manhua>/<name>')
def 漫画目录(manhua,name):
    if manhua=='manhua':
        mainpage=""
        完美目录=打开漫画('https://www.36mh.com/'+manhua+'/'+name)
        for x in range(len(完美目录)):
            pagelink=完美目录[x][0].split('/')
            pagelink[-1]=''
            mainpage+='<a href="{}" >{}</a> '.format('/'.join(pagelink)+str(x),完美目录[x][1])
        return mainpage
    else :
        return page(manhua+'/'+name)
@app.route('/<manhua>/<name>/<int:page>')
def 漫画观看页面(manhua,name,page):
    目录=打开漫画('https://www.36mh.com/'+manhua+'/'+name)
    网页=""
    图片链接=获取图片链接(int(page),目录)
    for x in range(len(图片链接)):
        网页+='<img src="{}" width=100%> <br>'.format(图片链接[x])
    if int(page)<=len(目录):
        网页+='<h1><a href="/{}">{}</a></h1>'.format(int(page)+1,目录[int(page)+1][1])
    return 网页
if __name__ =='__main__':
    app.run(host="0.0.0.0",port=5000,debug=True)

简而言之 把人家网页搬了一遍,去除了所有杂项,并把一话的图片设定载入到同一页面上去

### 关于漫画爬虫的实现方法 #### 1. 漫画爬虫的核心原理 漫画爬虫的主要目标是从网页上抓取图片资源以及相关的元数据(如章节名称、作者信息等)。其核心流程通常包括以下几个部分: - **请求页面**:通过发送HTTP请求获取目标网站的内容。 - **解析HTML结构**:利用正则表达式或第三方库(如BeautifulSoup[^1])提取所需的数据。 - **下载图片**:定位到图片URL后,使用`requests`或其他网络库将其保存至本地。 #### 2. 技术栈推荐 以下是构建漫画爬虫可能涉及的技术栈及其作用: - **编程语言**: Python因其丰富的生态支持成为首选。 - **网络请求库**: `requests`用于发起GET/POST请求;`aiohttp`适用于异步场景下的高并发处理[^2]。 - **HTML解析器**: BeautifulSoup配合lxml作为底层引擎能够高效解析复杂的DOM树[^3]。 - **存储方案**: 文件系统适合单机环境的小规模项目;数据库(MySQL, MongoDB等)更适合管理大规模或多维度关联性强的数据集。 #### 3. 示例代码片段 下面提供一段简易版的漫画章节图片抓取脚本: ```python import requests from bs4 import BeautifulSoup import os def fetch_comic(url): headers = {'User-Agent': 'Mozilla/5.0'} response = requests.get(url, headers=headers) soup = BeautifulSoup(response.text, 'html.parser') img_tags = soup.find_all('img', class_='comic-image') # 假设这是存放漫画图像标签的地方 folder_name = "downloaded_images" if not os.path.exists(folder_name): os.makedirs(folder_name) count = 1 for tag in img_tags: image_url = tag['src'] with open(f"{folder_name}/image_{count}.jpg", 'wb') as f: img_data = requests.get(image_url).content f.write(img_data) count += 1 fetch_comic("https://example.com/comic/chapter") # 替换为目标站点的实际链接 ``` 上述代码展示了如何访问指定网址并从中抽取所有符合条件的图片链接再逐一储存下来的过程[^1]。 #### 4. 需要注意事项 在实际操作前还需考虑一些额外因素以确保程序稳定性和合法性: - 尊重robots.txt文件规定,避免违规爬取受保护区域。 - 控制频率防止给服务器带来过大压力甚至被封禁IP地址。 - 对抗反爬机制比如验证码验证或者动态加载内容等问题,则需引入Selenium模拟浏览器行为或是深入研究JavaScript渲染逻辑来解决[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值