【问题标题】:Issue with JWikiDocs for Wikipedia CrawlingJWikiDocs for Wikipedia Crawling 的问题
【发布时间】:2018-01-16 10:48:16
【问题描述】:

我正在尝试使用JWikiDocs 作为一个专注的爬虫,将维基百科页面下载为文本文档。我在运行 Ubuntu 17.10.1 的 VirtualBox 中执行它。

我已经使用

清理和编译了 JWikiDocs
$ make clean

$ make all 

然后根据 README 文件,我在 options.txt 文件中指定种子 URL 和要下载的最大文档数。例如:

totalPages=100
seedURL=http://en.wikipedia.org/wiki/Microsoft

此文件包含在JWikiDocs/data/Microsoft 目录中。

然后我从 Ubuntu 终端使用以下命令执行 JWikiDocs:

$ java -classpath lib/htmlparser/htmlparser.jar:lib/jwikidocs.jar jwikidocs.JWikiDocs -d data/Microsoft

我遇到的问题是只下载了种子页面作为文档。即使我已经指定了 100 个要抓取的文档,它似乎也不会抓取种子页面中包含的 URL,而只是在最后终止。

我尝试了totalPages 参数的各种值,以及将Option.javamaxDepth 的值从4 的默认值更改。我还尝试将睡眠时间从 500 更改为 2000 ms。

我还注意到,在执行$ make test 时,测试目录的结果也是如此;实际上只更新了第一个文档。测试目录在其各自的文件夹中确实包含 100 个输出文档,但这些文件与可下载的 tar 文件打包在一起,并且在测试期间不会更新。我尝试删除它们并再次运行$ make test,但它们没有被复制。

有谁知道如何解决这个问题,以便 JWikiDocs 抓取指定种子页面中的 URL?我已经联系了出版商,但我认为 SO 可能会更快地提供帮助。

编辑:

我已包含检索日志,以便所有爬取选项都可见。如您所见,它处理种子 URL,然后终止。我怀疑问题出在底层 Java 的某个地方。

RetrievalLog.txt

根目录:../data/Microsoft

日志文件:../data/Microsoft/retrievallog.txt

数据目录:../data/Microsoft/data

检索最大深度:4

检索到的页面总数:100

事务之间的时间休眠:500 毫秒

错误事务后的睡眠时间:5000 毫秒

seedURL=http://en.wikipedia.org/wiki/Microsoft

输出编码:UTF-8

包含超链接的文本:true

当前队列大小:0

下载处理网址:http://en.wikipedia.org/wiki/Microsoft ...

下载和处理完成!保存 docID:1

【问题讨论】:

  • 我不确定这是否应该有 Java 标签。如果需要,请随时编辑和添加。

标签: java web-crawler wikipedia


【解决方案1】:

这个问题与 2018 年有关,我们都使用https 进行安全浏览。

史前代码仅限于 http 网址,这在 2018 年不适用于维基百科。

为了能够抓取这个,您必须在原始源中进行一些修改。

  1. 更改URLChecker 以将https 视为有效。这可以通过以下代码片段来实现:

    public static String wikiURL = "https://en.wikipedia.org"
    
  2. 修改类Engine。将第 108 行中的 <http: 替换为 <https: 以及第 154 行。注意,我们仅将 https 解析为此处的开始标签,因为它们现在由 Wikipedia 发布。但是,结束 wiki 标记仍必须是 </http> - 不要仅通过搜索和替换来更改它。

  3. 修改option.txt 以包含https-seed URL。例如,我使用了这个文件:

    totalPages=100
    seedURL=https://en.wikipedia.org/wiki/Microsoft
    
  4. 再次执行 make cleanmake all 并按照文档的建议重新运行。

我在本地对其进行了测试,它开始爬取页面,正如您在附加的检索日志输出中看到的那样:

当前队列大小:0 下载和处理 URL: https://en.wikipedia.org/wiki/microsoft ... 下载处理 完全的!保存 docID:1

当前队列大小:859 下载和处理 URL: https://en.wikipedia.org/wiki/microsoft_redmond_campus ... 下载中 处理完毕!保存 docID:2

当前队列大小:858 下载和处理 URL: https://en.wikipedia.org/wiki/redmond,_washington ... 正在下载和 处理完毕!保存 docID:3

当前队列大小:857 下载和处理 URL: https://en.wikipedia.org/wiki/list_of_business_entities ... 下载和处理完成!保存 docID:4

当前队列大小:1360 下载和处理 URL: https://en.wikipedia.org/wiki/public_company ... 正在下载和 处理完毕!保存 docID:5

上述解决方案的步骤有效,但需要您的本地干预。

我对原作者提供的代码库的个人评论:

它需要在代码质量、代码风格和性能方面进行如此多的现代化改造(与多线程 crawler4j 相比,它确实很慢)。仅用于重新构建您的实验。 不要在生产中使用它。

【讨论】:

  • 那时我已经非常接近自己解决这个问题了!我在 option.txt 文件中更改为 https,但我没想到要检查 Java 中的协议。非常感谢,辛苦了!
猜你喜欢
  • 2022-01-20
  • 1970-01-01
  • 2016-12-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-27
  • 1970-01-01
  • 2014-07-25
相关资源
最近更新 更多