我有以下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>
基本上,我希望得到两个列表:
Users = [{"BillyBob12345" : "123"}, {"JimBob43" : "124"}]
SuperUsers = [{"CookieMonster" : "112"}]
我目前正在使用带有BeautifulSoup4的Python 2.7,我能够找到所有用户,但我无法将它们分成他们尊重的群体。
答案 0 :(得分: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>
答案 1 :(得分: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 ]