我在刮桌子时遇到问题。表格由以下几行组成,请参考下面的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] 删除。
我来说两句