如何使用正则表达式解析HTML标记?

时间:2010-10-07 17:56:56

标签: python html regex

想知道如何使用正则表达式推断html元素的值(最好是在python中)。

例如,<a href="http://google.com"> Hello World! </a>

我将使用什么正则表达式从上面的html中提取Hello World!

3 个答案:

答案 0 :(得分:8)

使用正则表达式解析HTML已在SO上广泛讨论。共识是不应该这样做。

以下是一些值得阅读的相关链接:

我过去用来解析HTML文件的一个技巧是将其转换为XHTML,然后将其视为xml文件并使用xPath。如果这是一个选项,请查看:

答案 1 :(得分:7)

Regex + HTML...

但是BeautifulSoup是一个方便的图书馆。

>>> from BeautifulSoup import BeautifulSoup
>>> html = '<a href="http://google.com"> Hello World! </a>'
>>> soup = BeautifulSoup(html)
>>> soup.a.string
u' Hello World! '

例如,这将打印出此页面上的链接:

import urllib2
from BeautifulSoup import BeautifulSoup

q = urllib2.urlopen('https://stackoverflow.com/questions/3884419/')
soup = BeautifulSoup(q.read())

for link in soup.findAll('a'):
    if link.has_key('href'):
        print str(link.string) + " -> " + link['href']
    elif link.has_key('id'):
        print "ID: " + link['id']
    else:
        print "???"

输出:

Stack Exchange -> http://stackexchange.com
log in -> /users/login?returnurl=%2fquestions%2f3884419%2f
careers -> http://careers.stackoverflow.com
meta -> http://meta.stackoverflow.com
...
ID: flag-post-3884419
None -> /posts/3884419/revisions
...

答案 2 :(得分:0)

理想情况下,您不会使用正则表达式 - 它们不适合大多数解析任务,包括HTML。使用解析库 - 我不是专家python用户,但我确信有一个可用。