1 回答
TA贡献1864条经验 获得超2个赞
使用此代码,我将所有部分作为单独的元素。
第一:只有一个divwithid="team_stats"所以我用find()而不是find_all()
而不是 searchigdiv我搜索td并使用get_text()我在单元格中获取全文。这样我就不需要递归嵌套<div>,也不会从 empty 得到空字符串<div>。
从表格中的所有单元格中获取所有文本后,我将其拆分为较小的部分并清理它们。
我将其拆分—以获取53%和8 of 15作为单独的元素。但这—是不正常的-,所以我手动将它从 HTML 复制/粘贴到代码中。
我发现还有带有代码的字符'\xa0'(可以是“不间断空格”或类似的东西),我使用它清理它strip('\xa0')- 我也可以使用rstrip()/lstrip()或replace()`` or slice it with[1:] and[:-1]`。
from bs4 import BeautifulSoup as BS
import requests
url = 'https://fbref.com/en/matches/033092ef/Northampton-Town-Lincoln-City-August-4-2018-League-Two'
response = requests.get(url)
soup = BS(response.content, 'html.parser')
# --- getting data ---
data = []
stats = soup.find('div', id="team_stats")
for row in stats.find_all('td'):
text = row.get_text(strip=True)
data.append(text)
# --- splitting and cleaning data ---
print('Possession:', data[0], '|', data[1])
text1, percent1 = data[2].split('—')
percent2, text2 = data[3].split('—')
text1 = text1.strip('\xa0')
text2 = text2.strip('\xa0')
print('Shots on Target:', text1, '|', percent1, '|', text2, '|', percent2)
text1, percent1 = data[4].split('—')
percent2, text2 = data[5].split('—')
text1 = text1.strip('\xa0')
text2 = text2.strip('\xa0')
print('Saves:', text1, '|', percent1, '|', text2, '|', percent2)
结果:
Possession: 58% | 42%
Shots on Target: 8 of 15 | 53% | 2 of 4 | 50%
Saves: 1 of 2 | 50% | 8 of 8 | 100%
添加回答
举报