zoukankan      html  css  js  c++  java
  • 数据采集实战(四)-- 线性代数习题答案下载

    1. 概述

    前段时间在看一本很多人推荐的线性代数教材《线性代数应该这样学》第三版,这一版每个章节都有大量的习题。

    官方网站上虽然按照章节提供了习题的答案,一来因为网站是国外的,访问不流畅,二来答案中还夹杂着广告,影响查看。
    所以,想试着将答案爬取下来制作成pdf,查看起来方便,也不会受网络的影响。

    2. 采集流程

    只是获取网页比较简单,没什么好说的,这里和前几篇数据采集实战不一样的地方在于:

    1. 网页中有数学公式,这些公式通过前端js的转换才能正常显示,所以从html中直接获取DOM内容是没用的,要获取所有html元素
    2. 获取网页之后要去除不必要的元素(比如网页中的header,footer,menu,广告等等),然后再保存网页,也就是采集网页局部内容

    image.png
    绿色背景的部分是通过puppetter来完成的。
    蓝色背景的部分在采集之后通过PDF相关的命令行小工具来完成。

    2.1 去除网页中元素(绿色背景部分)

        await page.evaluate(() => {
          const domToRemove = [
            "#top-bar-wrap",
            "#site-header",
            "#main> .page-header",
            "#content > article > ul",
            "#content > article > .entry-content > center",
            "#content > article > .entry-content > .google-auto-placed",
            "#content > article > .entry-content > #amzn_assoc_ad_div_adunit0_0",
            "#content > article > .entry-content > #related_posts",
            ".post-tags",
            "nav",
            "section",
            ".addthis-smartlayers",
            "#right-sidebar",
            "footer",
          ];
          for (let j = 0; j < domToRemove.length; j++) {
            const doms = document.querySelectorAll(domToRemove[j]);
            for (let k = 0; k < doms.length; k++) {
              // !!!这一步是关键,将自己从DOM树中删除
              doms[k].parentNode.removeChild(doms[k]);
            }
          }
        });
    
        // 网页保存成html文件,为了后面可以转换成pdf
        await savePage(
          page,
          "./output/linearAlgebraExercises",
          exercies[i] + ".html"
        );
    

    2.2 生成PDF文档(蓝色背景部分)

    将html文件转成pdf的工具很多,python和nodejs有很多这种库,选择一种你熟悉的都可以。
    我用的 pandoc,转换效果还不错!数学公式都可以正确显示。

    # 转换html的命令示例
    pandoc input.html -t latex -o output.pdf
    

    显示效果如下:
    image.png

    合并多个pdf也有很多小工具,我使用的是 pdftk。

    # 合并pdf的命令示例
    pdftk input1.pdf input2.pdf input3.pdf cat output output.pdf
    

    3. 总结

    整个流程很简单,唯一值得说的技术点可能就是在获取网页时,实时的去除了不必要的部分。

    虽然很简单,但是整个流程是完备的,对它的细节进行一些完善之后,其实就是一个自动制作电子书的过程。

    4. 注意事项

    爬取数据只是为了研究学习使用,本文中的代码遵守:

    1. 如果网站有 robots.txt,遵循其中的约定
    2. 爬取速度模拟正常访问的速率,不增加服务器的负担
    3. 只获取完全公开的数据,有可能涉及隐私的数据绝对不碰
  • 相关阅读:
    dp的冗余(选数类)
    noip2016自测报告
    dalao高精
    二叉苹果树
    最长上升子序列加强版
    Above the Median
    树状数组学习笔记
    Java委托机制
    Java集合
    Java异常
  • 原文地址:https://www.cnblogs.com/wang_yb/p/15380917.html
Copyright © 2011-2022 走看看