私は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:MusicSegment
かpo:SpeechSegment
もちろん、各結果をテキストに変換してから単純な文字列検索を実行することもできますが、属性による検索の方が洗練されているようです。