抓取网页生成电子书(如何快速上手,做出自己的网页不是技术要点?)
优采云 发布时间: 2021-11-02 13:05抓取网页生成电子书(如何快速上手,做出自己的网页不是技术要点?)
上一篇简单展示了我们将网页转成PDF的结果,特别适用于序列化的网页文章,组织成一本书。本文也为大家简单讲解了技术要点,让大家快速上手,制作属于自己的电子书。技术要点一、 抓取网页并保存到本地
因为大部分网页都收录图片,所以很多网页都不是普通的静态网页。相应的内容是在浏览器加载过程中随着浏览器滚动条的滚动而加载的。
所以如果你只想简单地发送一个 URL 并返回一个 PDF 文件,它通常会失败。
使用代码控制浏览器,模拟浏览器的浏览操作。这是一个工具:selenium,我相信通常关注网络抓取的人对它很熟悉。
作者尝试搜索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);
private static void SaveHtml(ChromeDriver driver)
{
uint KEYEVENTF_KEYUP = 2;
keybd_event(Keys.ControlKey, 0, 0, 0);
keybd_event(Keys.S, 0, 0, 0);
keybd_event(Keys.ControlKey, 0, KEYEVENTF_KEYUP, 0);
Thread.Sleep(3000);
keybd_event(Keys.Enter, 0, 0, 0);
keybd_event(Keys.Enter, 0, KEYEVENTF_KEYUP, 0);
Thread.Sleep(5000);
driver.Close();
driver.Quit();
}
二、将多个网页保存为PDF
虽然WORD也可以用来打开网页,但估计WORD是用IE技术渲染网页的,很*敏*感*词*无法恢复。所以直接转PDF更科学。
PDF 的另一个好处是几乎所有的 PDF 阅读器都可以随意打开和显示原创效果。虽然 PDF 的编辑能力非常有限,但我们的目的主要是为了阅读,所以将 HTML 转换为 PDF 是非常理想的。
它可以将多个网页转换为一个PDF文件,阅读时更加连贯。
网页转PDF的工具是wkhtmltopdf,也是一个命令行工具,可以多种语言调用。当然,dotNET 调用是没有问题的,但是为了更好的体验,还是应该在 PowerShell 上使用。
wkhtmltopdf的安装方法,自行搜索资料学习,都在下一步完成,最后记得设置环境变量,让CMD和PowerShell识别。
平时可以看到的python的html to pdf功能,其实底层也是用wkhtmltopdf完成的。
要将多个网页转换为PDF,需要考虑排序问题。这时候使用Excel催化剂可以轻松实现HTML排版顺序问题。
一般来说,我们是按顺序下载网页的,所以简单的使用Excel Catalyst的遍历文件功能来遍历文件信息,在Excel上做一个排序处理,手动调整一些特殊文件的顺序。
另一个自定义函数stringjoin可以快速将多个文件合并成一个字符串组合,用空格隔开,每条记录都要用双引号括起来。
打开我们的 PowerShell ISE 软件,它是 win10 自带的。其他系统也有,可以自行搜索相关教程打开。
相信很多读者也和作者有同感。他们觉得命令行很可怕。它是一系列代码,尤其是帮助文件。
事实上,它确实突破了心理恐惧。命令行工具和我们在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 带来了极大的方便。该内容在互联网上,而不是您自己的数据,并且可能随时被删除和无法访问。压力下,肯定撑不了多久,所以我提前计划,先下载到本地,哈哈)。