聊一聊 gb688(国家标准全文公开系统) 展示原理

一、显示原理

我尽量说详细一点,我真的很佩服这个开发的想法,很巧妙的用了很多办法展示,且阻止打印,真的很伟大。

这个文档16页,每一页对应一个div展示
在这里插入图片描述


每个页面都是很多小方块(span)组成,其中有个样式,也就是说,这是一个巨大的图片,没有一个文字,全是像素!

background-position:控制背景图像在元素内的定位。决定了图像相对于元素的显示位置。
background-image:指定一个背景图像。它通过 URL 引入外部图像来设置背景

在这里插入图片描述


后面好奇为什么要拼接成一个页面,直接显示不好吗为什么要切块,我打开背景图片看看,我嘞个豆啊,明白了为什么要切块
在这里插入图片描述


对比发现,有些页面span高达70个,有些低质10个,为什么呢,页面不都是一样大小,分析后发现,只有显示的地方才有span,才有数据,空白的地方都是空白背景,烤出来后我把背景改成红色,如下下图
在这里插入图片描述

在这里插入图片描述


现在我们知道了大概原理,每一个页面分成了很多span元素块

span元素先限制展示大小,然后图片定位显示,相当于整个图片都显示在页面上,只给你看了一部分,但全部加载了,下面图片是去除展示显示,全部显示,知道多牛了吧

这样你要保存成pdf,就得开背景图形,多的页面70多个span,相当于你要重复加载70多次,相当于叠了70层,同一张图片然后合成,大约(0.7秒/张),那不得等疯了
在这里插入图片描述

二、保存PDF

1、打开调试(方便后续操作)

2、修改css(去除限制打印)

3、修改overflow(去除一页限制)

三、流量分析

1、图片来源

2、fileName来源

3、验证码地址

4、验证码提交

四、代码爬取(python)

1、用户输入

首先,要求输入一个编号(hcno),这是该标准或文件的标识。

2、设置请求的头部和Cookie

代码设置了请求头和Cookie,这些是为了模拟浏览器访问,并绕过一些反爬虫机制。

3、验证码处理

程序首先发送一个请求,获取一个验证码的图片(通常用于防止机器人访问)。这个验证码需要通过OCR(光学字符识别)技术来识别。
图片被编码为Base64格式并发送给一个验证码识别服务【自己云部署的】,通过该服务获取验证码的识别结果。
如果验证码识别成功,程序继续执行;如果失败,则会退出,一直重复到成功。

4、页面内容的解析

使用 BeautifulSoup 解析从目标网站获取的HTML内容。
该网站包含多个页面,其中每一页可能包含图像或其他资源。通过分析HTML,程序找到每一页的图像URL。

5、下载图像

从目标网站下载每一页的图片,并将这些图像保存为WebP格式文件(这是一种图像压缩格式)。

6、图像处理

处理每张下载的图片,使用PIL库将图像裁剪和拼接到一个画布上。图像裁剪的区域根据网页中的样式信息进行计算。
每一页的图像会被保存为一个PNG格式的图片文件。

7、生成PDF

通过 FPDF 库,将之前处理过的PNG图片转换为PDF文件。每张图片会根据其纵横比自动调整大小,以适应A4纸张大小(210mm宽,297mm高)。
最终生成一个包含所有图像的PDF文件。

8、保存PDF

PDF文件的命名基于当前的时间戳,并将其保存到本地。


代码太丑了,就不公布了。


五、参考文献

1.吾爱(1699809)

https://www.52pojie.cn/thread-1699809-1-1.html

链接: gb688预览-浏览器保存pdf下载的方法思路 - 吾爱破解 - 52pojie.cn

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

米汤爱学习

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

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

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

打赏作者

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

抵扣说明:

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

余额充值