下载道客巴巴文件

873 阅读2分钟

这是我参与2022首次更文挑战的第19天,活动详情查看:2022首次更文挑战

一、网页分析过程

道客巴巴是一个在线文档下载网站,最近需要从这个网站下载一些文件,但是积分不够,就想写一个爬虫来爬取想要的数据。

image.png

HTML结构解析

写爬虫程序爬取数据的第一步,就是要分析网页结构和内容,确认需要爬取的内容在网页的那些位置,我们打开一篇想要下载的文档:www.doc88.com/p-098390952…,检查网页结构之后发现文件内容并不是以图片或其他文件类型的形式渲染到网页上的,所以不方便通过解析html文件来获取数据。

image.png

网络传输数据

既然解析html文件方式不可取,接下来我们就考虑是否有网络数据传输,打开浏览器开发者工具下的Network选项,重新加载刚刚的页面,使用开发者工具抓取网络请求,我们会发现网络传输了下图中的内容数据,用浏览器打开下面的连接,能获取到后缀名为ebt的文件,打开这个文件需要下载额外的软件,这个比较麻烦,我就放弃的这种办法。

image.png

后面我发现这个文档使用gif 方式渲染内容,文档每一页的内容是对应canvas标签的背景图片,所以下载这个文档我只要下载这所有的这些背景图片,最后在按照顺序将他们合并到pdf文件里面就可以了。

二、下载背景图片

我用浏览器打开canvas的背景图片链接,发现他并不是文档的内容图片,这里应该还有其他网络请求或者这里还使用了js代码进行渲染,为了方便我就没有再去查看其他的网络请求,因为到这一步我已经可以使用一些方法获取到这些图片了。

image.png

我利用HTMLCanvasElement.toBlob() 方法创造Blob对象,用以获取canvas上的图片,然后利用URL.createObjectURL()创建一个带hash的url将这个图片保存到内存中,再利用a标签将这个图片保存到目标位置,最后使用URL.revokeObjectURL()释放掉这段内存。核心代码如下:

image.png

为了保证后面合并时的顺序,下载图片时我用数字顺序来命名文件,下载的图片如下:

image.png

三、png图片合并为pdf

最后我利用Python的第三方库fitz和glob库将获取到的图片顺序合并到pdf文件中,代码如下:

image.png

至此,我就免费下载到了道客巴巴里需要积分的文档啦~~~

image.png