【问题标题】:Search in HTML page using Regex patterns with python使用 Python 的正则表达式模式在 HTML 页面中搜索
【发布时间】:2012-07-02 12:48:40
【问题描述】:

我正在尝试在具有已知模式的 HTML 页面中查找字符串。 例如,在以下 HTML 代码中:

<TABLE WIDTH="100%">
<TR><TD ALIGN="LEFT" width="50%">&nbsp;</TD>
<TD ALIGN=RIGHT VALIGN=BOTTOM WIDTH=50%><FONT SIZE=-1>( <STRONG>1</STRONG></FONT> <FONT SIZE=-2>of</FONT> <STRONG><FONT SIZE=-1>1</STRONG> )</FONT></TD></TR></TABLE>
<HR>
<TABLE WIDTH="100%">
<TR>    <TD ALIGN="LEFT" WIDTH="50%"><B>String 1</B></TD>
    <TD ALIGN="RIGHT" WIDTH="50%"><B><A Name=h1 HREF=#h0></A><A  HREF=#h2></A><B><I></I></B>String</B></TD>
</TR>
<TR><TD ALIGN="LEFT" WIDTH="50%"><b>String 2.</B>
</TD>
<TD ALIGN="RIGHT" WIDTH="50%"> <B>
String 3
</B></TD>
</TR>
</TABLE>
<HR>
<font size="+1">String 4</font><BR>
...

我想找到 String 4 ,我知道它总是在

之间

&lt;HR&gt;&lt;font size="+1"&gt;
&lt;/font&gt;&lt;BR&gt;

如何使用 RE 搜索字符串?

编辑:

我尝试了以下方法,但没有成功:

p = re.match('<HR><font size="+1">(.*?)</font><BR>',html)

谢谢。

【问题讨论】:

  • 你考虑过用 xpath 代替正则表达式吗?
  • 我尝试过使用 BeautifulSoup。它不起作用,因为我在多个页面上运行解析器并且它们之间有细微的变化。
  • @Rgo:XPath 查询(使用 lxml)可以处理有细微差别的页面。
  • 您尝试使用 re.match 无效,因为 re.match 尝试从头开始匹配。 + 也有特殊含义,所以应该转义。但你走对了。

标签: python html regex parsing html-parsing


【解决方案1】:
re.findall(r'<HR>\s*<font size="\+1">(.*?)</font><BR>', html, re.DOTALL)

findall 正在返回一个列表,其中包含正则表达式中括号之间捕获的所有内容。我使用了 re.DOTALL,所以点也捕获了行尾。

我使用了\s*,因为我不确定是否会有空格。

【讨论】:

    【解决方案2】:

    这可行,但可能不是很健壮:

    import re
    r = re.compile('<HR>\s?<font size="\+1">(.+?)</font>\s?<BR>', re.IGNORECASE)
    r.findall(html)
    

    使用适当的 HTML 解析器会更好。 BeautifulSoup 非常好用且易于使用。查一下。

    【讨论】:

      【解决方案3】:
      re.findall(r'<HR>\n<font size="\+1">([^<]*)<\/font><BR>', html, re.MULTILINE)
      

      【讨论】:

        猜你喜欢
        • 2021-02-09
        • 2012-04-18
        • 1970-01-01
        • 2013-08-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-11-16
        相关资源
        最近更新 更多