我使用 Python 的“re”模块,如下所示:
request = get("http://www.allmusic.com/album/warning-mw0000106792")
print re.findall('<hgroup>(.*?)</hgroup>', request)
我所做的就是获取 HTML这个网站 http://www.allmusic.com/album/warning-mw0000106792,并寻找这个特定的代码片段:
<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 是一个棘手的问题。然而,在像这样的小情况下,特别是对于一次性脚本,我认为这是可以接受的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)