在HTML页面中快速查找单词的算法

5

我需要做一个布尔函数,如果一个单词在HTML页面的文本中,则返回true,否则返回false。

我知道使用lxml库分析整个页面树以找到单词很容易,但我认为迭代所有HTML块并查找单词是低效的。

有没有更快的算法建议(我需要多次进行此搜索)?


2
未来提问的专业技巧:一定要标记你正在使用的编程语言。我推断你在使用Python,因为你提到了lxml库,但如果你标记了你的问题为“python”,它将被许多Python大师看到。 - Hayden Schiff
1
我写问题的时候只是忘记了。很抱歉,谢谢您的提示! - arodriguezdonaire
你能预处理HTML页面吗?如果你计划多次进行此操作,将HTML页面的textContent放入专用存储(如ElastiSearchSolr)可能是值得的。 - musically_ut
1
所有(或许多)请求都发送到同一个主机吗?如果是的话,您应该确保使用 requests 会话对象,这将显着加快代码中的网络部分。 - Lukas Graf
1
谢谢Lukas,我会看一下的,因为所有请求都发送到同一个主机。 - arodriguezdonaire
显示剩余2条评论
2个回答

3
只要您不担心意外地在元素属性中找到该单词(如果您担心这一点,使用类似于lxml的工具解析HTML是您唯一的选择),那么您可以将整个HTML文档视为一个大字符串,并在其中搜索该单词。
def checkForWord():
    r = requests.get("http://example.com/somepage.html")
    return "myWord" in r.text

它对我来说完美地运作,谢谢!如果没有更好的答案出现,我会将其标记为解决方案 :) - arodriguezdonaire
2
您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - Lukas Graf

0

我会将整个页面作为字符串获取:

var markup = document.documentElement.innerHTML;

然后,我会使用一种方法在字符串中搜索字符串:

var n = markup.search("YourString");

如果找到匹配项,您将获得匹配项的索引号,如果未找到匹配项,则返回-1。


1
很确定他使用的是Python而不是JavaScript,因为lxml是一个Python库。 - Hayden Schiff
1
你可能是对的,问题中没有提到这一点,也没有标记为Python问题。好的侦探工作 ;) - Matt
抱歉需要澄清一下,我正在使用Python。 - arodriguezdonaire
您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - Matt
这也是 @oxguy3 的解决方案,不过用的是Python,对吧? - arodriguezdonaire
1
是的,他做得更好的解释了该怎么做,而不仅仅是提供代码,这是我的失误 :P - Hayden Schiff

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接