好的,所以我正在做一个漫画(日本漫画)下载器。日本漫画在线提供,但你只能阅读,如果你想下载,你必须开始保存图片文件,右击blah之类的.
因此,我正在工作的另一个漫画下载器,将下载所有章节的漫画指定,然后转换成pdf。
我已经完成了下载图像的代码和它的工作相当好,但问题是在pdf-转换部分。
这是我的密码
import requests
import urllib
import glob
from bs4 import BeautifulSoup
import os
from fpdf import FPDF
def download_image(url, path):
r = requests.get(url, stream=True)
if r.status_code == 200:
with open(path, 'wb') as f:
for chunk in r:
f.write(chunk)
start_chapter = int(input("Enter Starting Chapter: "))
end_chapter = int(input("Enter Ending Chapter: "))
chapters = range(start_chapter, end_chapter + 1)
chapter_list = []
for chapter in chapters:
chapter_list.append("https://manganelo.com/chapter/read_one_piece_manga_online_free4/chapter_" + str(chapter))
for URL in chapter_list:
r = requests.get(URL)
soup = BeautifulSoup(r.text, 'html.parser')
images = soup.findAll('img')
for i in images:
url = i.attrs["src"]
os.makedirs(url.split('/')[-2], exist_ok=True)
download_image(url, os.path.join(url.split('/')[-2], url.split('/')[-1]))
pdf = FPDF()
imageList = glob.glob("*")
for image in imageList:
pdf.add_page()
pdf.image(image, 10, 10, 200, 300)
pdf.output("One Piece Chapter", "F")因此,对于如何修复此错误,有任何建议:
raise RuntimeError('FPDF error: '+msg) RuntimeError: FPDF error: Unsupported image type: chapter_1_romance_dawn发布于 2018-11-02 12:28:45
首先,这是一个非常好的主意。
错误将发生,因为图像列表路径是错误的。
您正在将jpgs存储在文件夹中(章节名)。
所有你必须做的就是给出正确的路径到FPDF。
我创建了一个集合以避免重复。然后我删除了“图像”和“图标”文件夹->,也许你会使用它们?
cchapter = set()
for URL in chapter_list:
r = requests.get(URL)
soup = BeautifulSoup(r.text, 'html.parser')
images = soup.findAll('img')
for i in images:
url = i.attrs["src"]
cchapter.add(url.split('/')[-2])
os.makedirs(url.split('/')[-2], exist_ok=True)
download_image(url, os.path.join(url.split('/')[-2], url.split('/')[-1]))
cchapter.remove('images')
cchapter.remove('icons')
chapterlist = list(cchapter)
print(chapterlist[0])
def sortKeyFunc(s):
return int(os.path.basename(s)[:-4])
for chap in chapterlist:
pdf = FPDF()
imageList = glob.glob(chap + "/*.jpg")
imageList.sort(key=sortKeyFunc)
for image in imageList:
pdf.add_page()
pdf.image(image, 10, 10, 200, 300)
pdf.output(chap + ".pdf", "F")最后,我添加了一个循环为每个文件夹创建一个pdf ..。
然后将PDF命名为章节名称..。
你也错过了你的分机(“.pdf”).
这会管用的。:)
编辑:
glob.glob将以不正确的顺序返回文件列表。
参考资料:here
它可能根本没有排序,并且使用文件系统中条目的出现顺序,即在使用ls -U时得到的条目。(至少在我的机器上,这会产生与列表glob匹配相同的顺序)。
因此,您可以使用文件名(在我们的例子中作为一个数字)作为一个排序键。
def sortKeyFunc(s):
return int(os.path.basename(s)[:-4])然后在循环中添加imageList.sort(key=sortKeyFunc)。
注意:代码更新了.
https://stackoverflow.com/questions/53116930
复制相似问题