正则表达式:如何在html中查找属性,包括另一个属性

时间:2016-02-23 10:04:51

标签: python html regex beautifulsoup

在此HTML代码中:

<frameset border="0" framespacing="0" frameborder="0" rows="85,*">
<frame border="0" marginheight="0" name="logoframe" scrolling="no" noresize target="middle" src="a.html" onload="reload()">

<frameset cols="235,*">
<frame border="0" name="left" src="b.html" scrolling="no"><frame border="0" noresize name="main" src="c.html"  scrolling="auto"></frameset><noframes>
<body topmargin="0" leftmargin="0">
<p>This page uses frames, but your browser doesn't support them.</p></body>         
</noframes>
</frameset></html>

我想找到包含src的{​​{1}}属性 在此示例中,它应返回name="main"

3 个答案:

答案 0 :(得分:2)

可以使用BeautifulSoup完成此操作,如下所示:

from bs4 import BeautifulSoup

html = """<frameset border="0" framespacing="0" frameborder="0" rows="85,*">
<frame border="0" marginheight="0" name="logoframe" scrolling="no" noresize target="middle" src="a.html" onload="reload()">

<frameset cols="235,*">
<frame border="0" name="left" src="b.html" scrolling="no"><frame border="0" noresize name="main" src="c.html"  scrolling="auto"></frameset><noframes>
<body topmargin="0" leftmargin="0">
<p>This page uses frames, but your browser doesn't support them.</p></body>         
</noframes>
</frameset></html>"""

soup = BeautifulSoup(html)

frame = soup.find('frame', attrs={'name': 'main'})
print frame['src']

它将显示文字:

c.html

答案 1 :(得分:0)

使用JQuery,您可以按照以下方式执行此操作,

var srcFetched = $("input[name='main']").attr("src");
alert(srcFetched);

答案 2 :(得分:0)

最好使用 HTML或XML解析器 HTML或XML 内容中提取值,正则表达式很好,但我仍然希望Parser从html内容中提取数据。

有人在Beautifulsoup给出答案。

以下是lxml解析器

<强>演示

>>> from lxml import html as PARSER 
>>> root = PARSER.fromstring(html)
>>> root.xpath("//frame")
[<Element frame at 0xb748e414>, <Element frame at 0xb748eb94>, <Element frame at 0xb748e5a4>]
>>> root.xpath("//frame[@name='main']")
[<Element frame at 0xb748e5a4>]
>>> root.xpath("//frame[@name='main']/@src")
['c.html']
>>> 

在上面的代码中,

  1. 我们通过fromstring方法
  2. 创建对象
  3. 使用xpath mothod查找目标值和标记。
  4. xpath中的已使用条件以获取目标数据。