梅里亚姆-韦伯斯特词典,一个自1828年成立以来就致力于编纂和出版词典的机构,其在线资源对所有人免费开放。用户可以访问其网站,输入一个单词,获取定义。尽管编写代码来检索其数据库中的每个文件并将其复制到硬盘上可能在道德边界上有些模糊,但只要不出售这些数据,并且不添加对“Trump”这个词的侮辱性定义,那么这样做是可以接受的。
人们可能想要这样做的原因很简单,而且有很多,但归根结底,就是“为什么不呢?”。可以将其视为一个挑战,二进制体操或者仅仅是为了乐趣。这比玩数独游戏更有趣。
一旦制作了一个网页爬虫,制作下一个就会容易得多。最终可能会找到一个使用它的理由,即使现在想不到。在电脑上拥有梅里亚姆-韦伯斯特词典的副本非常酷,因为现在它已经整合到了字处理器中。
维基百科上关于梅里亚姆-韦伯斯特的页面会告诉,乔治和查尔斯·梅里亚姆在1828年创立了他们的公司,然后在1843年买下了诺亚·韦伯斯特的遗产,以整合他们现在世界闻名的参考书出版帝国。他们已经编辑和出版词典将近200年了,必须承认,自从高中以来,已经拥有过他们的半打产品,包括旁边的书架上的那本。
本文附带的源代码不会自行下载MW数据库,会告诉为什么...
首先,会解释一下它的作用。给它提供了梅里亚姆-韦伯斯特网站上列出的单词集合中的第一个URL,然后它将这个URL插入到它需要下载的URL队列中。然后它从这个列表中取出第一个URL,将其添加到它已经下载的URL列表中(目前为空),然后从梅里亚姆-韦伯斯特的网站下载文件。然后它解析HTML并找到指向“Dictionary Entries near 'cause”的链接。
一旦找到这些,它就会将它们与它已经下载的URL列表进行比较,并将尚未下载的URL添加到上面提到的列表中,然后在继续下一个URL之前,将这个文件保存到硬盘上。
这个想法非常简单。获取一个文件,找到它尚未尝试的链接,并将HTML文件保存在硬盘上。
但是...通常都会有问题。当遇到字母“A”的文件时,它的“entries near A”链接都指向它自己,这使得这个简单的抓取算法停止了。因此,不得不包括词典中按字母顺序排列的内容,作为爬虫尝试的单词/文件名。由于梅里亚姆-韦伯斯特词典中的所有文件都与它们定义的单词拼写相同,可以直接输入想要下载的任何单词的地址,例如,www.merriam-webster.com/dictionary/whatever。
string strURL_source = ParseHTML_MerriamWester_GetNextUntriedWordFrom_URLsList();
if (strURL_source.Length == 0)
{
strURL_source = ParseHTML_MerriamWester_GetNextUntriedWordFrom_Thesaurus();
}
可以在上述代码中看到它决定从它收集的URL列表中提取一个URL,或者尝试词典路线的地方。需要自己获取自己的词典才能做到这一点。但计划通过另外两篇文章来发布这个项目的结果,这两篇文章展示了:
如何将这些文件从255,000个HTML文件(离线时看起来像垃圾)重新编写成看起来比源文件更好的富文本文件文档(比想象的更麻烦)
如何将这个离线词典整合到一个文字处理器中,可以帮助写得更优雅(它需要一个搜索引擎)。
下面的屏幕截图显示了包含从梅里亚姆-韦伯斯特网站抓取的战利品的目录。
(插入带着傻笑的照片)。
以下代码行将有限的HTML知识付诸实践。本质上,它检测梅里亚姆-韦伯斯特的网页设计师用来告诉浏览器它将列出当前正在查看的单词附近的单词的HTML标记的存在。然后,它从HTML文档中提取所有这些单词的链接,并将它尚未看到的链接添加到它将用于下载下一个文件的新URL列表中。
URLsNearby
{
string strURLSNearby_start = "", intURLSNearby_Start);
}
get next URL
{
string strMWNextURLList_Start = "