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。