【问题标题】:Find word in HTML page fast algorithm在 HTML 页面中快速查找单词的算法
【发布时间】:2015-10-31 02:46:44
【问题描述】:

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

我知道很容易分析所有页面树,直到使用 lxml 库找到单词,但我发现遍历所有 html 块并查找单词是否存在效率低下。

对更快的算法有什么建议(我需要多次搜索)?

【问题讨论】:

  • 这个词在很多页面上使用,还是在页面上用于很多词?
  • 未来问题的专业提示:请务必使用您正在使用的语言的名称标记您的问题。我推断您使用的是 Python,因为您提到了 lxml 库,但是如果您已将您的问题标记为“python”,许多 Python 高手都会看到它。
  • 我只是在写问题时忘记了它。抱歉,感谢您的提示!
  • 所有(或许多)请求是否都发往同一主机?如果是,您需要确保使用requests sessions,这将显着加快您代码的网络部分。
  • 谢谢 Lukas,我去看看,因为所有请求都发往同一个主机

标签: python html search python-requests word


【解决方案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
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-09-07
  • 2019-11-26
  • 1970-01-01
  • 1970-01-01
  • 2016-05-22
  • 2017-10-10
  • 1970-01-01
相关资源
最近更新 更多