用 Python 爬取网页漫画

1 相关资料搜集

参考博客

(1)Python爬取腾讯动漫全站漫画详细教程(附带源码)
(2)用python爬取漫画,代入感太强了

如果上述链接失效,请查看备份资源:https://pan.quark.cn/s/5e09bf67b260

2 实现代码

2.1 提取单本漫画

以漫画网站 包子漫画 为例,提取漫画《一人之下》的代码如下:

import requests
from lxml import etree
from selenium import webdriver
from time import sleep
from bs4 import BeautifulSoup
import os

headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36'}

def getPics(url):
    # 获取网页源码
    browser = webdriver.Chrome()
    browser.get(url)
    data = browser.page_source
    # print(data)
    browser.close()

    # 提取章节名
    page_ming = etree.HTML(data)
    page_name = page_ming.xpath('//span[@class="title"]/text()')
    print(page_name[0])
    # 以章节名命名一个文件夹
    if not os.path.exists('D:/code/yiren/test1/' + page_name[0]):
        os.makedirs('D:/code/yiren/test1/' + page_name[0])

    #提取漫画主体部分
    soup = BeautifulSoup(data)
    body = soup.find('ul', attrs={'class': 'comic-contain'})
    # print(body)
    #设置变量i,方便为保存的图片命名
    i = 0
    #提取出主体部分中的img标签(因为图片地址保存在img标签中)
    for items in body.find_all("amp-img"):
        #提取图片地址信息
        item = items.get("src")
        print(item)

        basic_path = 'D:/code/yiren/test1/' + page_name[0] + '/'
        pic = requests.get(item, headers=headers)
        with open(basic_path + str(i + 1) + '.jpg' ,mode = "wb") as f:
            f.write(pic.content)
            i += 1


url_0 = 'https://cn.czmanga.com/comic/chapter/yirenzhixiafanwaixiutie-dongmantang/0_'
for index in range(0, 45):
    url = url_0 + str(index) + '.html'
    getPics(url)

2.2 把多张图片生成 PDF

上一步中提取出的图片按章存放在 test1 文件夹中,此处假定 test1 的子文件夹名字为数字,子文件夹中的图片名字也是数字。将 test1 文件夹中所有图片生成一个 PDF 文件的代码如下:

import os
from PIL import Image
from reportlab.lib.pagesizes import portrait
from reportlab.pdfgen import canvas

# 指定图片文件夹路径和输出的 PDF 文件名
image_folder = 'test1'
output_pdf = 'output.pdf'

# 获取所有子文件夹并按数字命名的方式排序
subfolders = sorted([os.path.join(image_folder, f) for f in os.listdir(image_folder)], key=lambda x: int(os.path.basename(x)))

# 创建 PDF 文档
c = canvas.Canvas(output_pdf, pagesize=portrait)

# 遍历子文件夹
for subfolder in subfolders:
    # 获取子文件夹中的图片文件列表
    image_files = sorted([f for f in os.listdir(subfolder)], key=lambda x: int(os.path.splitext(x)[0]))
    
    # 遍历图片文件并将它们添加到 PDF 中
    for image_file in image_files:
        # 打开当前的图片文件
        with Image.open(os.path.join(subfolder, image_file)) as img:
            # 获取图片的宽度和高度(以点为单位)
            img_width, img_height = img.size
            # 添加一页 PDF 页面,并设置页面尺寸与图片相同
            c.setPageSize((img_width, img_height))
            # 将图片绘制到当前页面上
            c.drawImage(os.path.join(subfolder, image_file), 0, 0, width=img_width, height=img_height)
            c.showPage()

# 保存 PDF 文件
c.save()
print(f'PDF 已创建:{output_pdf}')

3 提取单本漫画的过程

3.1 安装模块

先安装代码中需要的包,有点麻烦的是 webdriver,不同浏览器使用不同的webdriver,以 Chrome 浏览器为例(就是说电脑中安装的有 Chrome 浏览器),安装步骤如下:
(1)查看电脑中 Chrome 浏览器的版本
(2)下载对应版本的 ChromeDriver,大部分用的都是最新版的 Chrome,就要从这个链接(https://googlechromelabs.github.io/chrome-for-testing/#stable)中去下载,以版本为 116.0.5845.187 的浏览器为例,下载 win32 的 chromedriver(Windows 系统使用 win32 的没有问题,win64 不确定)

在这里插入图片描述
(3)解压之后,将 chromedriver.exe 放入 Python 的安装目录下(如果有安装 anaconda,就放入到 anaconda 的安装目录下,运行代码时使用 anaconda 自带的命令行)

3.2 获取网页源码

使用 webdriver 模拟对浏览器进行操作,获取网页源代码
获取网页源码的详细讲解参考:python爬虫之爬虫第一步:获取网页源代码

browser = webdriver.Chrome()
# 打开网页
browser.get(url)
# 获取网页源码
data = browser.page_source
print(data)
# 关闭网页
browser.close()

3.3 提取章节名和漫画

任意打开一个章节,查看代码特性
(1)章节名位于 class 为 title 的 span中,提取代码如下

page_ming = etree.HTML(data)
page_name = page_ming.xpath('//span[@class="title"]/text()')
print(page_name[0])

在这里插入图片描述

(2)漫画的主体部分在 class 为 comic-contain 的 ul 中,提取代码如下

soup = BeautifulSoup(data)
body = soup.find('ul', attrs={'class': 'comic-contain'})
print(body)

在这里插入图片描述

(3)图片的地址信息位于主体部分中 amp-img 标签的 src 中,提取代码如下

for items in body.find_all("amp-img"):
    item = items.get("src")
    print(item)

在这里插入图片描述

(4)保存图片到本地
设置 requests.get() 中的 headers 参数,用来模拟浏览器进行访问,代码如下

basic_path = 'D:/code/yiren/test1/' + page_name[0] + '/'
pic = requests.get(item, headers=headers)
with open(basic_path + str(i + 1) + '.jpg' ,mode = "wb") as f:
    f.write(pic.content)
    i += 1

headers 参数获取方法:以 Chrome 浏览器为例,在网址栏中输入 chrome://version/ ,页面中出现的 User Agent 即为我们需要的

在这里插入图片描述

headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36'}
### 如何使用 Python 爬取哔哩哔哩漫画 尽管目前提供的引用资料并未直接涉及如何爬取哔哩哔哩漫画的内容,但从已有参考资料中可以看出,Python 的爬虫技术被广泛应用于获取网络资源的信息。以下是基于现有技术和经验的一个可能实现方案。 #### 技术准备 为了成功爬取哔哩哔哩漫画的相关数据,需要掌握以下几个关键技术点: 1. **请求发送**:利用 `requests` 或 `httpx` 库模拟浏览器行为向服务器发起 HTTP 请求。 2. **解析 HTML/XML 数据**:借助 `BeautifulSoup` 或 `lxml` 解析返回的网页源码,提取所需信息。 3. **处理动态加载页面**:如果目标网站采用 AJAX 动态加载方式,则需结合 Selenium 或 Playwright 来自动化操作浏览器并捕获完整的 DOM 结构[^1]。 4. **存储数据**:可选用 JSON 文件、CSV 表格或者数据库(如 SQLite/MySQL)作为最终数据保存形式。 #### 实现步骤概述 虽然这里不提供具体代码片段,但可以给出大致框架供参考者自行完善: - 定位到包含所有漫画列表的目标URL地址; - 查看该页面是否存在分页情况,并确定每一页对应的参数变化规律; - 提取出单个作品详情链接后进一步访问其内部页面以获得更多细节描述字段比如作者名、章节数量等等; 需要注意的是,在实际编写程序之前应当仔细阅读目标站点的服务条款,确保自己的行为符合法律规范并且尊重原作者版权[^3]。 ```python import requests from bs4 import BeautifulSoup headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)' } def fetch_comic_list(url): response = requests.get(url, headers=headers) soup = BeautifulSoup(response.text, 'html.parser') comics = [] for item in soup.select('.comic-item'): # 假设这是漫画项目的CSS选择器 title = item.find('h2').text.strip() link = item.a['href'] comic_info = {'title': title, 'link': link} comics.append(comic_info) return comics if __name__ == "__main__": url = "https://example.com/comics" results = fetch_comic_list(url) print(results[:5]) # 打印前五个结果用于验证功能正常运行 ``` 上述示例仅为简化版演示逻辑,请根据实际情况调整 CSS Selectors 和其他相关设置。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值