0

私は次の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>

基本的に、私は2つのリストを取得しようとしています:

Users = [{"BillyBob12345" : "123"}, {"JimBob43" : "124"}]
SuperUsers = [{"CookieMonster" : "112"}]

私は現在、BeautifulSoup4 で Python 2.7 を使用しており、すべてのユーザーを見つけることができますが、それらを敬意を表するグループに分割することはできません。

4

2 に答える 2

0

それらがその順序であることがたまたまわかっている場合は、リスト内包表記を使用して辞書のリストを作成し、次を使用して「ユーザーページ」番号を解析できます.split('/')

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')]

>>> users
[{'BillyBob12345': '123'}, {'JimBob43': '124'}]
>>> superUsers
[{'CookieMonster': '112'}]

「Users」という名前にアクセスして辞書で使用する場合は、次を使用できます。

>>> firstTable.previousSibling.previousSibling
<h4>
      User
    </h4>
于 2017-09-14T00:54:50.437 に答える
0

私は実際にこれを使用して情報を抽出することができました:

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 ]
于 2017-09-14T15:34:50.683 に答える