如何使用不同的列标签(1=td和2=a)刮取tr?

2024-09-29 21:24:04 发布

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

我刮桌子有问题。该表由以下行组成,请参考下面的html代码:

<tr>
    <td align="center" class="hell" width="20%"> <b>1 : 0</b> </td>
    <td class="hell"> <a href="/speler_profiel/tjeerd-westdijk/" title="Tjeerd Westdijk">Tjeerd Westdijk</a> 1.</td>
</tr>, 
<tr>
    <td align="center" class="dunkel" width="20%"><b>2 : 0</b></td>
    <td class="dunkel"><a href="/speler_profiel/emiel-wendt/" title="Emiel Wendt">Emiel Wendt</a> 20.</td>
</tr>

请注意,每行由两列组成。从第一列(td)开始,我只想在标记内刮取文本,因此->;'1:0'&;'2 : 0 '. 从第二列开始,我只想在a标记中刮取文本,因此->;'Tjeerd Westdijk'和'埃米尔·温特

当我运行我的代码(请参考下面)时,我得到a标记之外的文本(也在第二列中),即1&;二十,

这是我的代码:

scores = []

for row in td1_7[start:end]:
scores.append([data.get_text(strip=True) for data in row.find_all('td')])

final_df = pd.DataFrame(scores, columns=['Score','Playes'])

print(final_df)

这为我提供了以下输出:

得分游戏 0 1:0特杰德-韦斯特迪克1。 12:0埃米尔·温特20

如何删除列中的1和20。玩家


Tags: 代码标记文本widthtrclasstdhref
1条回答
网友
1楼 · 发布于 2024-09-29 21:24:04

选择此列中的<a>并获取title属性,而不是使用播放器名称的整个<td>

data = '''<tr>
    <td align="center" class="hell" width="20%"> <b>1 : 0</b> </td>
    <td class="hell"> <a href="/speler_profiel/tjeerd-westdijk/" title="Tjeerd Westdijk">Tjeerd Westdijk</a> 1.</td>
</tr>
<tr>
    <td align="center" class="dunkel" width="20%"><b>2 : 0</b></td>
    <td class="dunkel"><a href="/speler_profiel/emiel-wendt/" title="Emiel Wendt">Emiel Wendt</a> 20.</td>
</tr>'''

from bs4 import BeautifulSoup

soup = BeautifulSoup(data, 'html.parser')

rows = []
for col1, col2 in zip(soup.select('td:nth-of-type(1)'), soup.select('td:nth-of-type(2) a[title]')):
    rows.append((col1.get_text(strip=True), col2['title']))

print('{: <20}{: <20}'.format('Score', 'Players'))
print('-' * 40)
for row in rows:
    print(''.join('{: <20}'.format(d) for d in row))

印刷品:

Score               Players             
                    
1 : 0               Tjeerd Westdijk     
2 : 0               Emiel Wendt         

相关问题 更多 >

    热门问题