0

私はBBCWebサイトでこのようなサイトをスクレイプ して、プログラムリストの関連部分を取得しようとしていますが、BeautifulSoupを使用してこれを実行し始めました。

関心のある部分は、次のようなセクションで始まります。

<li about="/programmes/p013zzsl#segment" class="segment track" id="segmentevent-p013zzsm" typeof="po:MusicSegment">

<li about="/programmes/p014003v#segment" class="segment speech alt" id="segmentevent_p014003w" typeof="po:SpeechSegment">

これまでに行ったことは、HTMLを開いてから、関心のある部分のResultSetをそれらが表示される順序で提供するためにsoup使用されます。soup.findAll(typeof=['po:MusicSegment', 'po:SpeechSegment'])

次に、セクションが次のようなHTMLを参照しているpo:MusicSegmentかどうかを確認します。po:SpeechSegment

<li about="/programmes/p01400m9#segment" class="segment track" id="segmentevent-p01400mb" typeof="po:MusicSegment"> <span class="artist-image"> <span class="depiction" rel="foaf:depiction"><img alt="" height="63" src="http://static.bbci.co.uk/programmes/2.54.3/img/thumbnail/artists_default.jpg" width="112"/></span> </span> <script type="text/javascript"> window.programme_data.tracklist.push({ segment_event_pid : "p01400mb", segment_pid : "p01400m9", playlist : "http://www.bbc.co.uk/programmes/p01400m9.emp" }); </script> <h3> <span rel="mo:performer"> <span class="artist no-image" property="foaf:name" typeof="mo:MusicArtist">Mala</span> </span> <span class="title" property="dc:title">Calle F</span> </h3></li>

typeofに関連付けられた属性にアクセスしたいのです<li>が、このHTMLのチャンク(BS4タグとして)が呼び出されsectionて入力するsection.liと、が返されますNone

section.img代わりにそうすると、何かが返ってくることに注意してください。

<img alt="" height="63" src="http://static.bbci.co.uk/programmes/2.54.3/img/thumbnail/artists_default.jpg" width="112"/>

そして私はそれからすることができました、例えばsection.img['height']戻るためにu'63'

私が欲しいのはそのsection.li部分に類似したものなのでsection.li['typeof']、私に与えるpo:MusicSegmentpo:SpeechSegment

もちろん、各結果をテキストに変換してから単純な文字列検索を実行することもできますが、属性による検索の方が洗練されているようです。

4

1 に答える 1

2

によって返されたリストを繰り返し処理しますfindAll

soup = BeautifulSoup('<li about="/programmes/p013zzsl#segment" class="segment track" id="segmentevent-p013zzsm" typeof="po:MusicSegment"><li about="/programmes/p014003v#segment" class="segment speech alt" id="segmentevent_p014003w" typeof="po:SpeechSegment">')

for elem in soup.findAll(typeof=['po:MusicSegment', 'po:SpeechSegment']):
    print elem['typeof']

戻り値

po:MusicSegment
po:SpeechSegment

次に、条件付きで他のタスクを実行します。

if elem['typeof'] == 'po:MusicSegment'
    do.something()
elif elem['typeof'] == 'po:SpeechSegment':
    do.something_else()
于 2013-03-18T19:54:43.777 に答える