首页 > 编程语言 >Python爬虫下载漫画

Python爬虫下载漫画

时间:2024-06-16 19:03:27浏览次数:12  
标签:headers Python image 爬虫 url 漫画 path div page

《 谒金门·萧瑟霜》

情眷恋 古往今来相看 几度流光人更远 伤离方寸乱

回梦空传幽怨 依旧尘缘未断 碧落黄泉寻觅遍 愁来天不管

最近有个轻小说改编动漫《在异世界迷宫开后宫》开播,看着还行,小说一般,流水账的感觉,而且目前国内暂时没有文库版的翻译,只有web版的个人翻译,不过对应的漫画画的很不错。

Note:这个是里番!

本文使用Python爬虫Requests和Selenium模块爬取这个漫画。

完整代码如下:

GitHub - tklk610/Python-Crawlies-for-369manhua: Python爬虫爬取《在异世界迷宫开后宫》漫画Python爬虫爬取《在异世界迷宫开后宫》漫画. Contribute to tklk610/Python-Crawlies-for-369manhua development by creating an account on GitHub.icon-default.png?t=N7T8https://github.com/tklk610/Python-Crawlies-for-369manhua

目录:

1.获取各话的url地址以及对用的标题(第几话);

2.得到每一话各个图片的url;

3.下载每张图片,并按第几话命名文件夹保存;

4.魔高一丈之反反扒

获取各话的url地址以及对用的标题(第几话)

漫画网页url:在异世界迷宫开后宫漫画免费阅读(下拉式)在线全集观看-369漫画网

 

使用分析工具右键-检查或者F12,得到每一话的网页url和对应话数。 

使用requests请求得到页面源码数据,使用xpath从中得到网页url和对应话数。

def get_page_path(url):
    headers_path = {
        "Accept"                    : "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8",
        "Accept-Encoding"           : "gzip, deflate, br",
        "Accept-Language"           : "zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2",
        "Connection"                : "keep-alive",
        # "Cookie"                    : "td_cookie=1374660017;ComicHistoryitem_zh=History=614,637984042562212870,101201,2,0,0,0,37&ViewType=0;MANGABZ_MACHINEKEY=deb97fc6-b460-45e1-b401-d74a6ac5931c;\
        #                               _ga_1SQXP46N58=GS1.1.1662778212.1.1.1662779657.0.0.0;_ga=GA1.1.1637493032.1662778213;firsturl=http % 3A % 2F % 2/Fwww.mangabz.com%2Fm101201%2F;readhistory_time=1-614-101201-2;\
        #                               image_time_cookie=109286|637984038221919904|0,40443|637984038335211502|0,40444|637984038452627191|0,101201| 637984042564044762 | 1;\
        #                               mangabzimgpage=109286|1:1,40443|1:1,40444|1:1,101201|2:1;\
        #                               mangabzcookieenabletest=1;mangabzimgcooke=109286%7C2%2C40443%7C2%2C40444%7C2%2C101201%7C6",
        # "Host"                      : "www.mangabz.com",
        # "Referer"                   : "http://www.mangabz.com/614bz/",
        # "Upgrade-Insecure-Requests" : "1",
        "User-Agent"                : random.choice(user_agent)
    }

    response_path = requests.get(url, headers=headers_path)   # 发送请求,获取响应
    if response_path.status_code == 200:
        print('Path Request success.')

    response_path.encoding = 'utf-8'  # 重新设置编码解决编码问题

    html_path = etree.HTML(response_path.text)
    # xpath定位提取想要的数据  得到图片链接和名称
    # //从匹配选择的当前节点选择文档中的节点,而不考虑他们的位置
    # @选取属性
    # /是从根节点选取。
    page_path = html_path.xpath('/html/body/div[5]/div[5]/div[2]/div[3]/ul/li/a/@href')
    page_path = ['https://www.369manhua.com' + x for x in page_path]

    page_name = html_path.xpath('/html/body/div[5]/div[5]/div[2]/div[3]/ul/li/a/text()')

    print(page_path)
    print(len(page_path))
    print(page_name)

    for page_index in range(0, len(page_path)) :
        page_url   = page_path[page_index]
        image_name = page_name[page_index]
        image_name = image_name.replace(' ', '')

        get_page_url(page_url, image_name)
        time.sleep(random.randint(5, 20))

        print("下载了一画")

2.得到每一话各个图片的url

在以上每一话的页面中,使用分析工具右键-检查或者F12,得到每张图片的url。

直接使用requests发起get请求,得到的源码数据经过了修改,需要进行处理,因此改用Selenium模块。

这个模块主要功能有两个:1.使用代码进行浏览器操作;2.自动处理AJAX请求;相当方便

需要下载对应版本浏览器驱动程序,本文使用Chrome浏览器,需要下载一个chromedriver.exe文件;

headers_page = {
        "Accept"          : "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8",
        "Accept-Encoding" : "gzip, deflate, br",
        "Accept-Language" : "zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2",
        "Connection"      : "keep-alive",
        "User-Agent"      : random.choice(user_agent)
    }

    save_path = save_dir + '/' + str(name)
    if not os.path.exists(save_path):
        os.makedirs(save_path)

    bro = webdriver.Chrome(executable_path='./chromedriver', chrome_options=chrome_options, options=option)
    bro.get(url)
    response_img = bro.page_source

    html_page = etree.HTML(response_img)
    image_url = list(html_page.xpath('/html/body/div[9]/div[1]/img/@src'))

    for page_num in range(0, len(image_url)) :
        get_image(image_url[page_num], page_num, name, save_path)
        time.sleep(random.randint(5, 20))

    bro.quit()

 以下代码是将Chrome浏览器设置成无头浏览器,即运行爬虫程序时屏幕上不会开启浏览器页面,不然电脑屏幕上自动进行浏览器操作,大半夜还是怪吓人的。另外加一些Selenium反扒策略

chrome_options = Options()
chrome_options.add_argument('--headless')
chrome_options.add_argument('--disable-gpu')

option = ChromeOptions()
option.add_experimental_option('excludeSwitches', ['enable-automation'])


3.下载每张图片

得到每一张图片的url后就可以使用requests直接下载了,由于这个网站的漫画很多webp格式的,所以需要处理一下。

try:
        image_data = requests.get(url=url, headers=headers_image).content
    except:
        image_data = requests.get(url=url, headers=headers_image, verify=False).content

    if str(url).endswith('.webp') :
        byte_stream = BytesIO(image_data)
        im = Image.open(byte_stream)
        # im.show()
        if im.mode == "RGBA":
            im.load()  # required for png.split()
            background = Image.new("RGB", im.size, (255, 255, 255))
            background.paste(im, mask=im.split()[3])

        im.save(save_path + '/' + str(num+1) + '.png', 'PNG')
        # with open(save_path + '/' + str(num+1), 'wb') as fp:
        #     fp.write(im)
    else :
        with open(save_path + '/' + str(num+1) + '.png', 'wb') as fp:
            fp.write(image_data)

4.魔高一丈之反反扒

1.headers,GET请求不能写全;

2.随机休息,时间可以长一点;

time.sleep(random.randint(5, 20))

3.headers里随机更换浏览器;

4.使用代理IP;

推荐一下吴军博士的书,《数学之美》,《浪潮之巅》,技术工程人员值得一读!

标签:headers,Python,image,爬虫,url,漫画,path,div,page
From: https://blog.csdn.net/m0_59092412/article/details/139708204

相关文章

  • 学会python——读取大文本文件(python实例六)
    目录1、认识Python2、环境与工具2.1python环境2.2VisualStudioCode编译3、读取大文本文件3.1代码构思3.2代码示例3.3运行结果4、总结1、认识PythonPython是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。Python的设计具有很强的可读......
  • Python爬虫获取B站漫画
    《眼儿媚·朦胧雾》身世飘零叹孤独回顾盼相扶情天不老雷霆易逝雨过云舒相思不忍轻离别携手更如初风急波涌扁舟不系终恋江湖最近有妖气上《鬼刀》停止更新了,Bilibili漫画上的又不能下载保存到本地,加上最近正在玩StyleGANs,需要一些动漫图片做训练数据集,所以搞个爬......
  • python IP 端口 socket tcp 介绍
    IP端口介绍1、IPIP地址是分配给网络设备上网使用的数字标签,它能够标识网络中唯一的一台设备windows环境可以使用ipconfig来查看自己的iplinux环境可以使用ifconfig来查看自己的ip2、端口端口是传输数据的通道,每个操作系统上都有65535个端口,通过对应的端口号把数......
  • Web爬虫-edu_SRC-目标列表爬取
    免责声明:本文仅做技术交流与学习...爬取后,结合暗黑搜索引擎等等进行进一步搜索.edu_src.pyimportrequests,timefrombs4importBeautifulSoupforiinrange(1,20):url=f'https://src.sjtu.edu.cn/rank/firm/0/?page={i}'print(f"正在获取第{i}页......
  • 类对象属性(python练习)
    编写一个程序来创建一个类并使用该类的方法来打印属性。创建一个类:创建自行车Bicycle类。在类中,创建两个方法:__init__()和print_attributes()。类有两个属性:gear'和speed,它们应该在init()`中初始化。在print_attributes()方法中,将gear属性和speed属性分别打印在两行。在类......
  • 【华为OD】D卷真题200分:数字游戏 python代码实现[思路+代码]
    【华为OD】2024年C、D卷真题集:最新的真题集题库C/C++/Java/python/JavaScript【华为OD】2024年C、D卷真题集:最新的真题集题库C/C++/Java/python/JavaScript-CSDN博客JS、Java、C、python、C++代码实现:【华为OD】D卷真题200分:数字游戏JavaScript代码实现[思路+代码]-CSDN......
  • 16个免费学习Python的网站和教程(2024年最新资源)
    16个免费学习Python的网站和教程(2024年最新资源)博主猫头虎的技术世界......
  • Python爬虫之路(12)--re正则表达式
    正则表达式认识正则正则表达式,又称规则表达式,(RegularExpression,在代码中常简写为regex、regexp或RE),是一种文本模式,包括普通字符(例如,a到z之间的字母)和特殊字符(称为"元字符"),是计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列匹配某个语法规则的......
  • Python爬虫入门与实践
    在当今的互联网时代,网络爬虫已经成为获取网络数据的重要工具。Python作为一种强大的编程语言,其简洁易读和丰富的库支持使得它成为爬虫开发的首选语言。本文将带你入门Python爬虫,并通过一个简单的示例来展示如何使用Python爬取网页数据。一、Python爬虫基础Python爬虫通常包括......
  • 【Python入门与进阶】综合练习题:学生成绩管理系统
    综合练习题:学生成绩管理系统题目描述:请你设计一个简单的学生成绩管理系统,要求能够进行以下操作:添加学生信息(包括姓名和学号)添加学生的成绩(包括科目和成绩)查询学生的平均成绩打印所有学生的成绩单解题思路:定义类:创建一个Student类,包含以下属性:name:学生姓名i......