0

我正在尝试从网站上抓取一些信息。我需要 8 个信息字段,我已经获得了 5 个字段,但 3 个字段总是为空。我认为我的正则表达式公式存在一些错误。我在 python 中做,我不必使用 BS。这是我需要抓取的 HTML 文件。这是其中一个网页的示例。

enter code here

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

<span class="primaryTitle">Professor of Pediatrics</span>

<span class="secondaryTitle">Professor in the School of Nursing</span>

<td><span class="label">Department:</span>
        &nbsp;&nbsp;
    </td><td>Pediatrics</td>

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

<td><span class="label">Address:</span></td><td>Box 2991<br>DUMC<br>Durham, NC &nbsp;27710   </td>

<td><span class="label">Phone:</span></td><td>
       (919)
       668-5111<br>

<td><span class="label">FAX:</span></td><td>                
        (919)
        688-5125</td>

这是我的代码,其中包含每种标签的相应正则表达式:

enter code here

patFinderFullname = re.compile('<span class="facultyName">(.*)</span>')
patFinderPTitle = re.compile('<span class="primaryTitle">(.*)</span>')
patFinderSTitle = re.compile('<span class="secondaryTitle">(.*)</span>')
patFinderDepartment = re.compile('<span class="label">Department:</span>\s+&nbsp;&nbsp;\s+</td><td>(.*)</td>')
patFinderDivision = re.compile('<span class="label">Division:</span>\s+&nbsp;&nbsp;\s+</td><td>(.*)')

patFinderAddress = re.compile(' <span class="label">Address:</span>\s+(.*)\s+</td>')
patFinderPhone = re.compile('<span class="label">Phone:</span></td><td>\s*(.*?)\s*<br>')
patFinderFax = re.compile('<td><span class="label">FAX:</span>\s+</td><td>\s+(.*)</td>')

前五个字段结果正确,但地址、电话和传真的后三个字段总是返回空。谁能指出我错过了什么?或者最后三个字段的正则表达式有什么问题。我已经发布了一个较早的 [1][question],但是这些问题后来才出现,所以我在另一个问题中问它。

[1] :如何在 python 中抓取分布在多行的 html 标签?

4

1 回答 1

1
patFinderAddress = re.compile('<td><span class="label">Address:</span></td>.*?</td>'
patFinderPhone  = re.compile('<td><span class="label">Phone:</span>\s*</td><td>\s*^\s*.*\s*^\s*.*<br>',re.M)
patFinderFax = re.compile('<td><span class="label">FAX:</span>\s*</td><td>\s*^\s*.*\s*^\s*.*</td>',re.M)

这是一些适用于您的数据的正则表达式。最后两个没有工作,因为数据跨越了多行。第一个不起作用,因为它是错误的。

但是,对于 html 解析,请使用 html 解析器,因为它更加健壮并为您提供所需的数据,而不是这种令人眼花缭乱的 html 字符串。

于 2013-02-15T08:20:15.047 回答