根据上一个同级的文本获取下一个同级的文本

2021-05-16 07:20:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下HTML:

<div id="infoTable">
    <h4>
      User
    </h4>
    <table>
        <tbody>
            <tr>
                <td class="name">
                    <a href="/userpage/123">BillyBob12345</a>
                </td>
            </tr>
            <tr>
                <td class="name">
                    <a href="/userpage/124">JimBob43</a>
                </td>
            </tr>
        </tbody>
    </table>
    <h4>
      Super User
    </h4>
    <table>
        <tbody>
            <tr>
                <td class="name">
                    <a href="/userpage/112">CookieMonster</a>
                </td>
            </tr>
        </tbody>
    </table>
</div>

基本上,我希望得到两个列表:

^{pr2}$

我目前正在使用python2.7和beauthulsoup4,我可以找到所有的用户,但我不能将他们分成相互尊重的组。在

2条回答
网友
1楼 ·

我真的可以用这个提取信息:

if (BS.find('div').find('h4',text="User")):
    FindUsers = BS.find('div').find('h4', text="User").findNext('table').find('td', {"class" : "name"}).findAll('a')
    Users = [{u.text.strip() :  u['href'].split('/')[2]} for u in FindUsers ]
网友
2楼 ·

如果您碰巧知道它们是按这个顺序排列的,那么您可以使用列表理解来创建这些字典列表,使用.split('/')解析“userpage”编号:

firstTable = soup.findAll('table')[0]
users = [{a.text : a['href'].split('/')[2]} for a in firstTable.findAll('a')]

secondTable = soup.findAll('table')[1]
superUsers = [{a.text : a['href'].split('/')[2]} for a in secondTable.findAll('a')]

^{pr2}$

如果要访问“Users”名称,然后将其用于词典,可以使用:

>>> firstTable.previousSibling.previousSibling
<h4>
      User
    </h4>

相关问题