Python爬虫爬取网站小漫画

python爬取小漫画

最近在google冲浪的时候发现一个很有意思的漫画网站,可以看韩国的小漫画,但是只可以看很少的一部分,后面的需要付费观看,于是就想着怎么才能免费看到这个网站的所有漫画。

于是我对这个网站进行了分析,然后没有发现可以利用的地方,最后在源码中发现,漫画图片的地址不是来自本网站,而是引用别的网站的图片,最重要的是,这个被引用的网站里所有的漫画都是免费的。。。。

???貌似想到了一个不错的赚钱方法!!!

(ಡωಡ)hiahiahia

跳转到这个免费网站,对源码进行分析,发现所有漫画都保存在booklist目录下,路径为(https://www.免费看韩漫.com/booklist?area=1&end=-1&page=
1)。这个路径只会显示部分漫画,不会显示所有漫画,问题出在area参数上,需将area=1改为area=-1即可。

page是页面数,在爬虫运行时,利用for循环更改page参数,即可模拟翻页来对每一页进行爬取。在area改为-1之后,页面数有20页,每页有36本,每本算50章,每章10张图,每张图200k,接近70个g(具体大小以实际为准),所以下载前要确认硬盘大小是否足够。

因为我现在还不知道多线程怎么写(* ̄m ̄),所以爬虫运行速率比较慢,大佬看看就好。。

完整源码

import requests
from bs4 import BeautifulSoup
import os
#定义请求头headers,只需user-agent即可
headers={'User-Agent':'Mozilla/5.0 (Linux; U; Android 8.1.0zh-cn; JSN-AL00a Build/HONORJSN-AL00a) AppleWebKit/537.36 (KHTML, like Gecko)Version/4.0 Chrome/57.0.2987.132 MQQBrowser/8.1 Mobile Safari/537.36'}
def get_url():
    books=[]
    books_cover=[]
    #为初始url赋值
    original_url="https://www.免费看韩漫.com/booklist?area=-1&end=-1&page="
    #页面总共有20页,用for循环来模拟翻页
    for i in range(1,21):
        #页面url等于初始url加上页标
        page_url=original_url+str(i)
        #请求页面url
    r=requests.get(page_url,headers=headers)
        #获取文本
    soup=BeautifulSoup(r.text,"html.parser")
        #获取当前页标的所有漫画封面地址并添加到列表
        for cover in soup.find("div",class_="manga-list").find_all("img",class_="manga-list-2-cover-img lazy"):
            books_cover.append(cover)
        #获取当前页标所有p标签并遍历给p
        for p in soup.find("div",class_="manga-list").find_all("p",class_="manga-list-2-title"):
            #找到p标签中的a标签
            book_path=p.find("a")
            #找到a标签中的纯文本,这是书名
            book_title=book_path.get_text()
            #书的url地址为域名加上a标签中的href属性值
            book_url="http://www.免费看韩漫.com"+book_path['href']
            #将书名,每本书对应的url添加给books
            books.append((book_title,book_url))
    return books
def get_catalog_content(books):
    #每本书的标志位
    flag_book=1
    #创建空目录
    catalog=[]
    #提取书名和地址
    for book_title,book_url in books:
        #每本书每一张图片的标志位
        flag_picture=1
        #创建漫画保存路径
        path="./books/"+book_title
        try:
            os.makedirs(path)
        except:
            print("创建目录失败")
        #请求书地址
        r=requests.get(book_url,headers=headers)
        #将请求的返回内容解析
        soup=BeautifulSoup(r.text,"html.parser")
        
        #找到页面中每一话的地址,遍历给a
        for a in soup.find("ul",id="detail-list-select").find_all("a"):
            #每一话的url地址
            content_url="https://www.免费看韩漫.com"+a['href']
            #请求章节地址
            r_chapter=requests.get(content_url,headers=headers)
            #解析请求
            soup=BeautifulSoup(r_chapter.text,"html.parser")
            for picture in soup.find("div",class_="view-main-1 readForm").find_all("img",class_="lazy"):
                #图片url
                picture=picture['data-original']
                #每一张图片的保存路径
                name_flag=path+"/"+str(flag_picture)+".jpg"
                #请求图片地址
                r_picture=requests.get(picture,headers=headers)
                try:
                    with open(name_flag,"wb") as f:
                        f.write(r_picture.content)
                        print("正在下载第",flag_book,"本/","该本已下载数量:",flag_picture,"图片网址:",picture)
                        flag_picture+=1
                except:
                    print("请检查文件路径")
        flag_book+=1
get_catalog_content(get_url())

后话

为了过审,目标网站地址已用中文掩盖。文件保存路径为当前目录,如需更改,直接找到path变量更改路径即可。过程中请勿断网,否则需要覆盖重新下载,爬取到漫画后,每本漫画都储存在books目录下,每张漫画都有序号,可以下载个漫画阅读器进行观阅,祝你身体健康。ԅ(¯ㅂ¯ԅ)

楼主目前还是个懵逼学生,啥也不知道,大佬看看就好,交流进群695650348。

  • 5
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冰阔落hwic

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值