“科学文库”书籍下载 | 利用python根据网址批量下载图片 | 合并图片生成PDF文件

本教程不需要注册便可以下载旧版“科学文库”中的全本书籍(http://159.226.29.161/shop/book/Booksimple/list.do),差不多18年以前出版的都可以下,具体情况请自行测试。

该方法下载的书籍为图片格式,可看清文字但清晰度一般,且无法进一步编辑,仅用于查看浏览。望大家支持正版。


1. 下载方法

以《中国乡村社区空间论》一书为例,书的地址是:
http://159.226.29.161/shop/book/Booksimple/show.do?id=B0275651AADAE4CC3AC5D1B9E342DD906000
经过分析,原始图片的地址是:
http://159.226.29.160/knReader/request/TebReadHandler.ashx?b={网址id后面的字符串}&p=&page={页码}
比如,刚才说的这本书只能预览前30页,但是根据这个方法,可以直接打开第100页的原始图片:http://159.226.29.160/knReader/request/TebReadHandler.ashx?b=B0275651AADAE4CC3AC5D1B9E342DD906000&p=&page=100.
通过python批量下载,一次性下载一本书,再制作为pdf。

2. 利用python根据网址批量下载图片

页码、url、path根据实际情况替换即可

1
2
3
4
5
6
7
import urllib
i = 1
while i <= 404:
    url = "http://159.226.29.160/knReader/request/TebReadHandler.ashx?b=B4C8E74F2DFDB297FE053010B0A0A4FBC000&p=&page="+str(i)
    path = "D://Deskstop//666//"+str(i)+".png"
    urllib.request.urlretrieve(url,path)
    i = i+1

3. 合并图片生成PDF文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
from reportlab.lib.pagesizes import A4, portrait, landscape
from reportlab.pdfgen import canvas

def convert_images_to_pdf(img_path, pdf_path):
    pages = 0
    (w, h) = portrait(A4)
    c = canvas.Canvas(pdf_path, pagesize = portrait(A4))
    l = os.listdir(img_path)
    l.sort(key= lambda x:int(x[:-4]))
    for i in l:
        f = img_path + os.sep + str(i)
        c.drawImage(f, 0, 0, w, h)
        c.showPage()
        pages = pages + 1
    c.save()
   
if __name__ == "__main__":
    img_path = "D://Deskstop//666"
    pdf_path = "D://Deskstop//666//aa.pdf"
    convert_images_to_pdf(img_path, pdf_path)

参考资料:

网友:wudunxu
使用Python合并图片生成PDF文件__曾静的博客