0

Web サイトから情報をスクレイピングしようとしています。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>')

最初の 5 つのフィールドの結果は正しく表示されますが、住所、電話、ファックスの最後の 3 つのフィールドは常に空になります。誰かが私が欠けているものを指摘できますか? または、最後の 3 つのフィールドの正規表現のどこが悪いのでしょうか。以前[1][質問]を投稿しましたが、これらの問題はその後に届いたので、別の質問で質問しています。

[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)

これがあなたのデータで機能するいくつかの正規表現です。データが複数の行にまたがっていたため、最後の2つは機能していませんでした。それが間違っていたので、最初のものは機能しませんでした。

ただし、html解析の場合は、htmlパーサーを使用します。これは、はるかに堅牢であり、この目障りなhtml文字列ではなく必要なデータを提供するためです。

于 2013-02-15T08:20:15.047 に答える