假设以下是
HTML文档的子集…请注意,有多个表重复,但< a name =“1”>可以是“2”,“3”,“4”等,每个表具有不同的文本.
<table align="center" width="550">
<tr>
<td valign="top" width="300"><b>Product:</b></img></td>
<td>
<a name="1"></a>1) Text Editor
<p>An application for the editing of text files.</p>
<br>
<b>Application Name: Notepad</b>
<br>
<b>Type: Writing</b>
<br><br></td>
</tr>
</table>
我希望能够找到一个等于特定“#”的“a”标签(在这种情况下,1)
并能够以某种方式得到文本:“1)文本编辑器”.
我知道如果我把整个文档美化了,我可以使用像findAll(“table”)这样的东西来给我所有的表格,但我不知道我怎么可能达到那个价值.我可以做一些像findAll(“a”)的东西,但是如何指定“name”等于(在这种情况下为1)?即使我能做到这一点,我也无法进入“1)文本编辑器”,因为“a”标签是空的……我也无法得到类似“< b>应用程序名称:记事本< / b>”中部分.
结合使用python / beautifulsoup的最佳解决方案是什么,或者是否有更好的方法可以根据事实得出表格中的“1)文本编辑器”和“应用程序名称”和“类型”部分a< a name =“1”>< / a>在它之前?示例语法很棒.
最佳答案 您可以使用findAll指定属性…
>>> a = soup.findAll("a", attrs={"name": "1"})[0]
…然后获取下一个节点……
>>> a.next
u'1) Text Editor\n'
……和下一个< b>元素……
>>> a.findNext("b")
<b>Application Name: Notepad</b>
… 等等.
顺便说一句,attrs参数只是必要的,因为name是findAll()的特殊参数.如果它是其他一些属性,你可以使用例如
>>> a = soup.findAll("a", href="whatever")