抓取网页生成电子书(如何快速上手,做出自己的网页不是技术要点?)
优采云 发布时间: 2022-01-17 14:05抓取网页生成电子书(如何快速上手,做出自己的网页不是技术要点?)
上一篇文章简单展示了我们将网页转换成PDF的结果,特别适合序列化网页文章,组织成卷。
本文还简要讲解了技术要点,让大家快速上手,制作属于自己的电子书。
技术要点一、爬取网页并保存到本地
因为大部分网页都有图片,所以很多网页都不是普通的静态网页,相应的内容只有在浏览器的加载过程中才会加载,随着浏览器滚动条的滚动。
所以如果你想简单地传递一个 URL 并返回一个 PDF 文件,它通常会失败。
使用代码控制浏览器,模拟浏览器的浏览操作。这是一个工具:硒。相信一般关注网络爬虫的人都比较熟悉。
笔者尝试搜索selenium+C#的相关词。没想到selenium是一个支持多种语言的工具。我将详细介绍自我搜索。以下是百度百科的简单介绍。
Selenium [1] 是一种用于 Web 应用程序测试的工具。Selenium 测试直接在浏览器中运行,就像真正的用户一样。支持的浏览器包括 IE (7, 8, 9, 10, 11), Mozilla Firefox, Safari, Google Chrome, Opera等。该工具的主要功能包括: 测试与浏览器的兼容性 - 测试看看你的应用程序是否可以在不同的浏览器和操作系统上正常工作测试系统功能-创建回归测试以验证软件功能和用户需求支持自动记录动作和自动生成.Net、Java、Perl等不同语言的测试脚本。
因此,不要犯错误和常识。你认为网络抓取很容易与 python 一起使用。您还可以使用 C# 中的常用工具。当前的工具将不仅限于实现一种语言。相信随着开源、dotNET的深入,当生态越来越好时,会有更多便捷的工具出现。
在 C# 代码中,通过 Seenium 控制浏览器的行为,在浏览器上打开不同的 URL,然后下载相应的文件。
因为我们要的是图文版的数据,而不仅仅是一些结构化的数据,最简单的方法就是用CTRL+S将网页保存到本地,类似于浏览器的行为。它也是通过使用代码模拟发送击键来实现的。有兴趣的读者可以参考以下代码。
在网上,python的实现都是一样的,作者简单修改成了dotNET版本。
[DllImport("user32.dll", EntryPoint = "keybd_event", SetLastError = true)] public static extern void keybd_event(System.Windows.Forms.Keys bVk, byte bScan, uint dwFlags, uint dwExtraInfo); 私有静态无效 SaveHtml(ChromeDriver 驱动程序){ uint KEYEVENTF_KEYUP = 2; ¨K9K
二、将多个网页保存为 PDF
虽然WORD也可以用来打开网页,但估计WORD使用IE技术渲染网页,很*敏*感*词*无法恢复。所以直接转成PDF更科学。
PDF 的另一个优点是几乎所有的 PDF 阅读器都可以毫无区别地打开和显示原创效果。虽然 PDF 的编辑能力非常有限,但我们的主要目的是阅读,因此将 HTML 转换为 PDF 是最理想的。
它可以将多个网页转换为一个 PDF 文件,以实现更连贯的阅读。
网页转PDF的工具是wkhtmltopdf,它也是一个命令行工具,可以多种语言调用。当然调用dotNET是没有问题的,但是更好的体验肯定是用在PowerShell上的。
wkhtmltopdf的安装方法,自查资料学习,都在下一步完成。最后,记得设置环境变量,以便 CMD 和 PowerShell 能够识别它们。
通常可以看到的python的html转pdf功能,其实底层也是用wkhtmltopdf完成的。
当多个网页转换为PDF时,需要考虑排序问题。这时候使用Excel Catalyst就可以轻松实现HTML的布局顺序。
一般来说,我们都是按顺序下载网页的,所以简单的利用Excel Catalyst的文件遍历功能,对文件信息进行遍历,在Excel上做一些排序处理,手动调整一些特殊文件的顺序。
然后有一个自定义函数stringjoin,可以快速将多个文件组合成一个字符串组合,用空格分隔,每条记录都要用双引号括起来。
打开win10自带的PowerShell ISE软件。还有其他系统,大家可以自行搜索相关教程打开。
相信很多读者都和作者有同感。他们觉得命令行很吓人。它是一系列代码,尤其是帮助文档。
事实上,它真的突破了心理恐惧。命令行工具和我们在Excel上写函数的原理是一个函数名传入各种参数,但是命令行的参数可以很大。
下面是我们在PowerShell上用一个命令将我们的多个html文件合并为一个PDF文件的操作。
笔者也花了不少功夫去阅读帮助文档,以便写出更多特殊的命令,比如添加页眉和页脚功能。
开头的参数是全局参数。具体说明请参考官方文档。
全局参数写好后,展开多个html文件,最后加上pdf文件名,可能太多了。该文件使用相对路径。您需要将 PowerShell 的当前路径切换到 html 存储文件夹。切换指令为 CD。
终于,激动人心的时刻来了,可以成功生成一个pdf文件。
包括页眉和页脚信息,一本共计400多页的PDF电子书诞生了。
有兴趣的读者不妨将他们最喜欢的网页相册制作成 PDF 文件,以便于访问。之前的错误是为了追求PDF阅读器的简化,现在又用【福昕阅读器】(感谢上一篇后读者的推荐),老式的免费PDF阅读软件,可以阅读基于文本的PDF文件。批注,记笔记。我推荐大家在这里使用它。
同样,搜索关键词 后,会出现关键词 的列表。比如在学习DAX的过程中,如果想像参考书一样查看ALLSELECT函数的使用情况,可以搜索全文。比我们用搜索引擎能找到的要好得多。完成学业后,您还可以突出显示并做笔记。
结语
在研究本文功能实现的过程中,我重新发现了dotNET的强大。我不需要太羡慕python的网页抓取。它在 dotNET 中仍然非常有用。
同时,在 Windows 环境下,没有什么比 dotNET 的开发更有生产力了。python再好,说到分享和交互也是很头疼的,但是dotNET的桌面开发自然是最大的优势。
在OFFICE环境下开发的优势更加详细。其实这篇文章的功能也可以移到Excel环境中无痛执行,后面有时间会慢慢优化整个流程。
HTML转PDF带来了极大的便利。内容在网络上,不是你自己的数据,随时可能被删除,无法访问(本文采集返回的DAX2中文翻译在版权方的压力下,肯定不会持久时间长了,所以我提前计划,先下载到本地,嘿嘿)。