我在刮桌子时遇到了问题。该表由以下几行组成,请参考下面的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)中,我只想刮擦标签so->'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 Emiel Wendt20。
如何删除列播放器中的1和20。?
答案 0 :(得分:0)
在该列中选择---
BasedOnStyle: WebKit
BreakBeforeBraces: Allman
BraceWrapping:
AfterEnum: false
IndentCaseLabels: 'true'
AlignConsecutiveAssignments: 'true'
AlignConsecutiveDeclarations: 'true'
AlignEscapedNewlines: 'true'
AlignTrailingComments: 'true'
AllowShortFunctionsOnASingleLine: 'false'
#...
而不是整个<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))