6

我在网站和 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>

我遇到的问题是,没有一个元素具有我可以选择以缩小某些范围的属性。在每个“...”中可能有类似的标记,例如 more<a>之类的<table>

我知道这table tr table tr td a是我需要的链接所独有的,但是 BeautifulSoup 将如何获取这些链接?我不确定如何在不执行一堆单独的代码行的情况下获取嵌套标签。

有什么帮助吗?

4

1 回答 1

15

您可以在以下位置使用CSS 选择器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>]
于 2013-04-01T18:40:07.333 回答