吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2801|回复: 16
收起左侧

[Python 原创] GB官方网页在线预览文件下载思路

  [复制链接]
pk555157815 发表于 2022-12-23 23:24
本帖最后由 pk555157815 于 2022-12-23 23:41 编辑

起因

最近需要在某官方网站下载一些GB/T 及 GB 文件,但是该网站很多文件只提供在线预览功能,通过虚拟打印或者浏览器console的方法貌似也不能实现下载,研究了一下预览页面源码,利用Python写了个小工具来下载pdf,希望和论坛的大神交流一下思路。

预览页面源码分析

关键部分是3层结构,第2层即为每个存储每个页面内容的源码,第3层出现了名为bg 的 url 链接。
1.png
打开链接下载的图片,发现疑似将每个pdf页面进行了分割后重新排列。
2.png
只要能找到重排规律即可恢复每一页pdf内容。
3.png
pdfImg-8-0 代表切割后小图在pdf页面中的位置,应该是第0行,8列
background-position:-240px 0px 代表在分割后合成图(下称:底图)中位置。
根据网页元素分析,小图大小为119*168; 4.png
推测知 bg-position 像素Δ增量 应该为120px和169px。
知道上述定位原则后即可对底图进行分割按照重排规律进行组合,最后输出pdf文件即可。

Python代码实现

为避免侵权,只提供图片切割与重排的代码。其余部分可根据思路自行补充。
涉及的库:bs4,pillow,pandas

def ditu_cut(ditu_pic):
    # ###
    # 将底图切分为119*169的小图片
    # :param ditu_pic:pillow.image对象
    # :return:
    # ###
    w, h = ditu_pic.size
    col, row = int(w / 120), int(h / 169)
    pic_mat = pd.DataFrame(numpy.zeros((row, col)))

    for i in range(col):
        for j in range(row):
            pic_mat.iloc[j, i] = ditu_pic.crop((i * 120, j * 169, i * 120 + 119, j * 169 + 168))
    return pic_mat

def page_merge(page_pic, pic_mat, merge_pos, ditu_pos):
    # '''
    # 将分割的小图合并成每页pdf内容
    # :param page_pic: 新建的pdf页面,大小1190*1680
    # :param pic_mat: ditu_cut返回的pillow对象组成的dataframe
    # :param merge_pos: 小图在pdf每页的位置即col,row
    # :param ditu_pos: 小图在底图的位置,即x,y
    # :return:
    # '''
    y, x = int(int(ditu_pos[0]) / 120), int(int(ditu_pos[1]) / 169)
    col, row = int(merge_pos[0]) * 119, int(merge_pos[1]) * 168

    page_pic.paste(pic_mat.iloc[x, y], (col, row))

5.png
代码怎么弄都不对,可以看图片。

备注

经过测试,该网站提供了在线预览功能的文件,均能通过此方式进行下载。
我也不太专业,如果有Bug,可以集思广益一起优化。

免费评分

参与人数 2吾爱币 +8 热心值 +2 收起 理由
苏紫方璇 + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
Xingyemao + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

340621 发表于 2022-12-24 11:01
pk555157815 发表于 2022-12-24 10:26
可以截图,但是页数多的话,每次截图都挺麻烦的。ps:主要我也没找到合适的长截图工具

faststone的长截图就不错,而且可以圈定范围
 楼主| pk555157815 发表于 2022-12-24 16:24
绯红の光 发表于 2022-12-24 13:45
感谢分享,不过油猴一个 Wenku Doc Downloader 的脚本可以直接下载,安装后左侧界面有个下载为PDF,点击直 ...

好东西,了解了,感谢
wzg01 发表于 2022-12-24 07:26
GTR022 发表于 2022-12-24 08:33
楼主V5 太厉害了 慢慢学习
yiguodunbuxia 发表于 2022-12-24 08:40
厉害,佩服佩服
ysjd22 发表于 2022-12-24 09:25
谢谢。试试
xinxirong 发表于 2022-12-24 10:17
截图是不是更快?
 楼主| pk555157815 发表于 2022-12-24 10:26
xinxirong 发表于 2022-12-24 10:17
截图是不是更快?

可以截图,但是页数多的话,每次截图都挺麻烦的。ps:主要我也没找到合适的长截图工具
yzjtxwd 发表于 2022-12-24 11:51
学习一下
hnwang 发表于 2022-12-24 12:14
感谢分享 试一下
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 00:04

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表