我正在尝试在 BBC 网站上抓取类似这样 的网站,以获取节目列表的相关部分,而我刚刚开始使用 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 soup
,然后用于soup.findAll(typeof=['po:MusicSegment', 'po:SpeechSegment'])
给出我感兴趣的部分的 ResultSet,它们的出现顺序。
然后我想要做的是检查一个部分是否引用po:MusicSegment
或po:SpeechSegment
在 HTML 中看起来像:
<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
当然,我可以简单地将每个结果转换为文本,然后进行简单的字符串搜索,但按属性搜索似乎更优雅。