如何刮掉在python中遍布多行的html标签?

时间:2013-02-15 04:58:22

标签: python scripting web-scraping

我正在尝试在python中抓取一个网页。我能够轻松获得单行标签的结果,但对于分布在多行的标签,我的代码无法检索任何内容。

在HTML源代码中,单行标记显示为:

<td><span class="facultyName">John Matthew Falletta, MD</span>

并且多个行标记显示为:

<td><span class="label">Division:</span>
            &nbsp;&nbsp;
                  </td><td>Hematology/Oncology</td>

这是我写的:

patFinderFullname = re.compile('<span class="facultyName">(.*)</span>')

fullname = re.findall(patFinderFullname,webpage)         #works fine

patFinderDivision = re.compile('<span class="label">Division:</span>&nbsp;&nbsp;</td><td>(.*)</td>')

division = re.findall(patFinderDivision,webpage)       #doesn't work

这里我的网页变量包含必须要删除的网址。有人可以指出,我错过了什么,或者我错在哪里?

2 个答案:

答案 0 :(得分:4)

我强烈建议您使用BeautifulSoup。 它是一个用于解析HTML文档的Python库。

P.s:如果你想坚持自己的代码,使用\ s *跳过正则表达式中的空格。

patFinderDivision = re.compile('<span class="label">Division:</span>\s*&nbsp;&nbsp;\s*</td><td>(.*)</td>')

答案 1 :(得分:1)

只是添加一个样本到你需要什么样的正则表达式:

re.compile('<span class="label">Division:</span>\s*&nbsp;&nbsp;\s*</td><td>(.*?)</td>')