在 HTML 页面中快速查找单词的算法
Posted
技术标签:
【中文标题】在 HTML 页面中快速查找单词的算法【英文标题】:Find word in HTML page fast algorithm 【发布时间】:2015-10-31 02:46:44 【问题描述】:我需要做一个布尔函数,如果单词在 html 页面的文本中,则返回 true,否则返回 false。
我知道很容易分析所有页面树,直到使用 lxml
库找到单词,但我发现遍历所有 html 块并查找单词是否存在效率低下。
对更快的算法有什么建议(我需要多次搜索)?
【问题讨论】:
这个词在很多页面上使用,还是在页面上用于很多词? 未来问题的专业提示:请务必使用您正在使用的语言的名称标记您的问题。我推断您使用的是 Python,因为您提到了 lxml 库,但是如果您已将您的问题标记为“python”,许多 Python 高手都会看到它。 我只是在写问题时忘记了它。抱歉,感谢您的提示! 所有(或许多)请求是否都发往同一主机?如果是,您需要确保使用requests
sessions,这将显着加快您代码的网络部分。
谢谢 Lukas,我去看看,因为所有请求都发往同一个主机
【参考方案1】:
只要您不担心在元素属性或其他内容中意外找到该词(如果您担心这一点,使用 lxml 之类的东西解析 HTML 是您唯一的选择),您可以只处理将整个 HTML 文档作为一个大字符串并在其中搜索您的单词:
def checkForWord():
r = requests.get("http://example.com/somepage.html")
return "myWord" in r.text
【讨论】:
它非常适合我,谢谢!如果它没有出现更好的答案,我会将其标记为解决方案:) 请注意,对于 Python 2.x,如果您想正确处理包含非 ASCII 字符的文本,则应该类似于u"Rodr\xedguez" in r.text
- r.text
返回 unicode
,因此搜索词需要也是 unicode。【参考方案2】:
我会将整个页面作为字符串获取:
var markup = document.documentElement.innerHTML;
然后,我会使用一种方法来搜索字符串中的字符串:
var n = markup.search("YourString");
您将获得匹配索引的数字,如果未找到匹配,则为 -1。
【讨论】:
很确定他使用的是 Python 而不是 javascript,因为 lxml 是一个 Python 库。 你可能是对的,在问题中没有提到这一点,也没有被标记为 python 问题。出色的侦探工作;) 对不起,我使用的是 Python 没问题,我的解决方案仍然成立,将整个页面作为字符串,搜索该字符串。如果你只对字符串感兴趣,就没有理由遍历 dom 是的,他只是在实际解释要做什么方面做得更好,而不是仅仅提供执行它的代码,哎呀:P以上是关于在 HTML 页面中快速查找单词的算法的主要内容,如果未能解决你的问题,请参考以下文章