维基百科爬行的 JWikiDocs 问题

Issue with JWikiDocs for Wikipedia Crawling

我正在尝试将 JWikiDocs 用作将维基百科页面下载为文本文档的重点抓取工具。我在 VirtualBox 运行 Ubuntu 17.10.1.

中执行它

我已经使用

清理并编译了 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.java 内更改了 maxDepth 的默认值 4。我还尝试将睡眠时间从 500 更改为 2000 ms.

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

有谁知道如何解决这个问题,以便 JWikiDocs 在指定的种子页面中抓取 URLs?我已经联系了发布者,但我认为这样可以更快地提供帮助。

编辑:

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

RetrievalLog.txt

Root directory: ../data/Microsoft

Log file: ../data/Microsoft/retrievallog.txt

Data directory: ../data/Microsoft/data

Retrieval max depth: 4

Total number of retrieved pages: 100

Time sleep between transactions: 500 milliseconds

Time sleep after an error transaction: 5000 milliseconds

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

Output encoding: UTF-8

Text including hyperlinks: true

Current queue size: 0

Downloading and processing URL: http://en.wikipedia.org/wiki/Microsoft ...

Downloading and processing completed! Save docID: 1

此问题与我们都使用 https 安全浏览的 2018 年有关。

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

为了能够抓取它,您必须对原始源进行一些修改。

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

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

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

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

我在本地对其进行了测试,它开始抓取页面,正如您在随附的检索日志输出中所见:

Current queue size: 0 Downloading and processing URL: https://en.wikipedia.org/wiki/microsoft ... Downloading and processing completed! Save docID: 1

Current queue size: 859 Downloading and processing URL: https://en.wikipedia.org/wiki/microsoft_redmond_campus ... Downloading and processing completed! Save docID: 2

Current queue size: 858 Downloading and processing URL: https://en.wikipedia.org/wiki/redmond,_washington ... Downloading and processing completed! Save docID: 3

Current queue size: 857 Downloading and processing URL: https://en.wikipedia.org/wiki/list_of_business_entities ... Downloading and processing completed! Save docID: 4

Current queue size: 1360 Downloading and processing URL: https://en.wikipedia.org/wiki/public_company ... Downloading and processing completed! Save docID: 5

上述解决方案的步骤可行,但需要您在当地进行干预。

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

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