【问题标题】:How to use Regular Expression to extract information from a HTML webpage?如何使用正则表达式从 HTML 网页中提取信息?
【发布时间】:2011-06-06 06:53:54
【问题描述】:

如何使用正则表达式从这样的 HTML 网页中提取答案“Here is the answer”?

  <b>Last Question:</b>
  <b>Here is the answer</b>

【问题讨论】:

  • “最后一个问题:这就是答案”中的 HTML 在哪里??
  • 你用什么编程语言来实现 RegEx?
  • 现在是 2011 年,这种问题仍然再次出现..*sigh*
  • 这很容易用正则表达式来完成。

标签: python html regex


【解决方案1】:

我知道不建议使用正则表达式来解析 html,而是回答您的问题, 如果您使用 php simplehtmldom 是您的朋友。 http://simplehtmldom.sourceforge.net/

【讨论】:

    【解决方案2】:

    谢谢大家!

    这是我使用 BeautifulSoup 的解决方案,因为我使用的是 Python 框架:

      response = opener.open(url)
      the_page = response.read()
    
      soup = BeautifulSoup(''.join(the_page))
      paraText1 = soup.body.find('div', 'div_id', text = u'Last Question:')
    
      if paraText1:
        answer = paraText1.next
    

    【讨论】:

      【解决方案3】:

      不要使用正则表达式来解析 HTML。如果你有标签汤,而不是格式良好的 SGML/XML/HTML5,这会加倍。

      【讨论】:

        【解决方案4】:

        Don't use regex。使用像 Jsoup 这样的 HTML 解析器。

        String html = "<b>Last Question:</b><b>Here is the answer</b>";
        Document document = Jsoup.parse(html);
        Element secondBold = document.select("b").get(1);
        System.out.println(secondBold.text()); // Here is the answer
        

        Jsoup 是基于 Java 的。对于其他编程语言,也有可用的 HTML 解析器。如果您使用 C#,请查看 Nsoup。如果您使用的是 PHP,请查看 phpQuery(所有这些解析器都使用 jQuery 类似 CSS3 选择器来选择元素,这简直太棒了)。

        【讨论】:

          【解决方案5】:

          正如查尔斯所说,不要为此使用正则表达式;如果您使用的是 PHP,我建议您使用内置的 DOM 解析功能,再加上 XPath 方法证明非常可靠。

          如果您比这更开放,我建议您使用 jQuery 通过 Node.js 完成这项工作,我自己最近经常这样做 - 它让生活变得轻松。

          【讨论】:

            【解决方案6】:
            <b>Last Question:</b>\\s*(<b>.*?</b>)
            

            或者,更详细地说,

            String x  ="<b>Last Question:</b>\n<b>Here is the answer</b>";
            Pattern p = Pattern.compile("<b>Last Question:</b>\\s*(<b>.*?</b>)");
            Matcher m = p.matcher(x);
            if (m.find())
               System.out.println(m.group(1));
            

            当 HTML 或类似标签不存在或随机出现而没有提供足够的上下文信息时,正则表达式仍然是一种选择。在这种情况下,我们需要查看人类语音中的一些单词。

            【讨论】:

              猜你喜欢
              • 2015-09-28
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2015-01-05
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多