我正在使用Python的“re”模块,如下所示:

request = get("http://www.allmusic.com/album/warning-mw0000106792")
print re.findall('<hgroup>(.*?)</hgroup>', request)

我正在做的就是获取this site的HTML,并寻找以下特定代码段:
<hgroup>
    <h3 class="album-artist">
        <a href="http://www.allmusic.com/artist/green-day-mn0000154544">Green Day</a>        </h3>

    <h2 class="album-title">
        Warning        </h2>
</hgroup>

但是,它继续打印一个空数组。为什么是这样?为什么re.findall找不到此代码段?

最佳答案

您正在解析的HTML多行。您需要像这样将re.DOTALL标志传递给findall:

print re.findall('<hgroup>(.*?)</hgroup>', request, re.DOTALL)

这允许.匹配换行符,并返回正确的输出。

@jsalonen是正确的,当然,用正则表达式解析HTML是一个棘手的问题。但是,在这样的小情况下,特别是对于一次性脚本,我会说这是可以接受的。

10-04 21:06