0

Web ページから連絡先の詳細を抽出しようとしていますが、Beautiful Soup を使用していくつかの情報を抽出することに成功しました。

しかし、適切に構築されていないため(html)、一部のデータを抽出できません。なので正規表現を使っています。しかし、ここ数時間、正規表現を学ぼうとしていて、ちょっとショックを受けました。

 InstanceBeginEditable name="additional_content" 
<h1>Contact details</h1>
<h2>Diploma coordinator</h2>


                                Mr. Matthew Schultz<br />
<br />
                                    610 Maryhill Drive<br />


                                Green Bay<br />
                                WI<br />
                                United States<br />
                                54303<br />
Contact by email</a><br />
                                Phone (1) 920 429 6158          
                                <hr /><br />

抽出する必要があり、

マシュー・シュルツ氏

アメリカ合衆国 54303 グリーンベイ 610 Maryhill Drive

そして電話番号。グーグル検索で見つけたものを試してみました。しかし、どれも機能しません(私の知識が少ないためですが、ここで私の最後の努力です。

con = ""
for content in contactContent.contents:
    con += str(content)

print con

address = re.search("Mr.\b[a-zA-Z]", con)

print str(address)

時々私はNoneを得ます。

みんな助けてください!

PS。コンテンツはネットで自由に利用でき、著作権は侵害されていません。

4

2 に答える 2

1

あなたは正規表現でこれを行うことについて尋ねました。divごとにこのデータを含む新しい複数行の文字列を取得すると仮定すると、次のようにデータを抽出できます。

import re

m = re.search('</h2>\s+(.*?)<br />\s+<br />\s+(.*?)<br />\s+(.*?)<br />\s+(.*?)<br />\s+(.*?)<br />\s+(.*?)<br />', con )
if m:
    print m.groups()

出力:

('Mr. Matthew Schultz', '610 Maryhill Drive', 'Green Bay', 'WI', 'United States', '54303')

正規表現でOKのスタートを切ったようです。正規表現の鍵は、通常、数字または数字のグループを定義し、その後に式を何回繰り返すかを示す数量式を定義することを覚えておくことです。この場合、最初に、1つ以上のスペース文字(改行を含む)が必要であることを正規表現エンジンに通知します</h2>\s+ここでの他の唯一のニュアンスは、(.*?)すべてを怠惰なキャプチャである次の式です-次の式である次の式に遭遇するまで、それは何でも取得し<br />ます。

編集:また、名前の後にすべてのアドレス情報が統一された形式であるという事実を利用して、正規表現をクリーンアップできるはずです。少し遊んでみましたが、うまくいきませんでしたので、改善したいという方にはアプローチです。

于 2012-05-05T13:16:08.310 に答える
1

OK、データを使用して、編集して解析ルーチンを関数内に埋め込みます

def parse_list(source):
    lines = ''.join( source.split('\n') )
    lines = lines[ lines.find('</h2>')+6 : lines.find('Contact by email') ]                   
    lines = [ line.strip()
              for line in lines.split('<br />')
              if line.strip() != '']
    return lines

# Parse the page and retrieve contact string from the relevant <div>
con = ''' InstanceBeginEditable name="additional_content" 
<h1>Contact details</h1>
<h2>Diploma coordinator</h2>


                                Mr. Matthew Schultz<br />
<br />
                                    610 Maryhill Drive<br />


                                Green Bay<br />
                                WI<br />
                                United States<br />
                                54303<br />
Contact by email</a><br />
                                Phone (1) 920 429 6158          
                                <hr /><br />'''


# Extract details and print to console

details = parse_list(con)
print details

これはリストを出力します:

['Mr. Matthew Schultz', '610 Maryhill Drive', 'Green Bay', 'WI', 'United States', '54303']
于 2012-05-05T11:58:05.143 に答える