我们正在使用Elastic Enterprise Search的应用程序搜索Web爬网程序。我们已经观察到,它不会对HTML页面的所有内容进行爬网和索引。
我们怀疑这可能是由于HTML响应太大或<body>
标记太大。
事实并非如此,正文内容和HTML响应的最大限制都在默认限制范围内。
然而,爬虫只抓取页面上的少量内容。我们认为这可能是由于div标记损坏/未关闭造成的,但事实并非如此。
我们验证了HTML响应,没有未关闭的div。
我们还观察了使用Kibana的爬虫日志,上面写着Success 200。但当我们真正检查页面内容时,它甚至还没有被爬行一半。大约20%的内容是由爬网程序爬网的。
我相信网络爬虫在幕后使用Apache Tika。我使用使用ApacheTika的psvm Java代码解析了本地代码中的html内容。我在HTML方面没有遇到任何问题。我可以扫描所有的HTML内容。
为什么会发生这种情况?网络爬虫没有为整页内容编制索引的原因是什么?爬行器是新的,所以没有多少人在使用它,所以没有太多论坛来检查已经回答的问题。
我们最终通过修复HTML内容解决了这个问题。如果遇到不理解的标记或文本,Elastic Enterprise Search的Web爬网程序似乎会终止对页面内容的爬网或提取。
例如,在我们的案例中,它是脚本中的一个简单HTML注释,但该注释中是
<script>
var s = s.contains("<!--cq")"...
它认为<--cq是一个HTML标记,并寻找一个结束标记,但我们没有,因为这只是一个脚本。不幸的是,数据弹性排除也不起作用,我们不得不删除这个条件。
原来Elastic WebCrawler使用的解析器非常脆弱。