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

天狼星

我在刮桌子时遇到问题。表格由以下几行组成,请参考下面的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' & 'Emiel Wendt'。

当我运行我的代码(请参阅下文)时,我得到了 a 标签之外的文本(也在第二列中),即 1. & 20。

这是我的代码:

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 Tjeerd Westdijk1。1 2 : 0 埃米尔温特20。

如何删除列播放器中的 1 和 20.?

安德烈·凯斯利

而不是在此列中<td>选择完整的玩家名称<a>并获取title属性:

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         

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章