BeautifulSoup中的嵌套标签 - Python

时间:2013-04-01 18:33:48

标签: python beautifulsoup

我在网站和stackoverflow上看了很多例子,但我找不到我的问题的通用解决方案。我正在处理一个非常混乱的网站,我想抓一些数据。标记看起来像这样:

...
<body>
...
    <table>
        <tbody>
            <tr>
            ...
            </tr>
            <tr>
                <td>
                ...
                </td>
                <td>
                    <table>
                        <tr>
                        ...
                        </tr>
                        <tr>
                            <td>
                                <a href="...">Some link</a>
                                <a href="...">Some link</a>
                                <a href="...">Some link</a>
                            </td>
                        </tr>
                    </table>
                </td>
            </tr>
        </tbody>
    </table>
</body>

我遇到的问题是没有任何元素具有我可以选择缩小范围的属性。在每个“...”内部可能会有类似的标记,例如更多<a>的{​​{1}}以及诸如此类的内容。

我知道<table>对于我需要的链接是唯一的,但BeautifulSoup如何抓住这些链接?我不确定如何在不做一堆单独的代码行的情况下抓取嵌套标签。

任何帮助?

1 个答案:

答案 0 :(得分:11)

您可以使用CSS selectors in select

soup.select('table tr table tr td a')

In [32]: bs4.BeautifulSoup(urllib.urlopen('http://google.com/?hl=en').read()).select('#footer a')
Out[32]:
[<a href="/intl/en/ads/">Advertising Programs</a>,
 <a href="/services/">Business Solutions</a>,
 <a href="https://plus.google.com/116899029375914044550" rel="publisher">+Google</a>,
 <a href="/intl/en/about.html">About Google</a>,
 <a href="http://www.google.com/setprefdomain?prefdom=RU&amp;prev=http://www.google.ru/&amp;sig=0_3F2sRGWVktTCOFLA955Vr-AWlHo%3D">Google.ru</a>,
 <a href="/intl/en/policies/">Privacy &amp; Terms</a>]