我想通过这样的网页解析并只收集初学者的名字:
http://espn.go.com/nba/boxscore?gameId=400827888
我的脚本抓住了页面上的所有名字,但我不能区分底部球队的首发球员(在这种情况下是亚特兰大)何时开始以及球队的替补球员在哪里(在这种情况下是底特律)结束。真正的问题是,顶级球队在他们列出的名单上可以有11-15个人,所以我不能按照我的理解分成一个数字。
正如所写的那样,这给了我活塞的前10个名字 - 不是前五个活塞,前五个是老鹰队。我认为一种策略依赖于徽标,但考虑到它们在HTML中的编码方式,这似乎非常棘手。
def parse_boxscore(url):
"""Gathers names of starters from both teams, stores in list"""
soup = make_soup(url)
starters = [td for td in soup.findAll("td", "name")]
return starters[0:5], starters[6:11]
有人能想到一致的策略吗?我不是非常精通技术,所以我会牺牲相对效率来简化(我知道,我知道)......
答案 0 :(得分:1)
如果您想要的只是初学者,那么它非常简单,只需在 div.content.hide-bench 中拉出第一个tbody,然后从 td.name <中提取文本< / em>标签:
import requests
from bs4 import BeautifulSoup
teams = {}
page = requests.get('http://espn.go.com/nba/boxscore?gameId=400827888')
soup = BeautifulSoup(page.content)
for table in soup.select("div.content.hide-bench"):
team = table.select_one("div.table-caption").find(text=True)
teams[team] = [tr.select_one("td.name").text for tr in table.find("tbody").find_all("tr")]
from pprint import pprint as pp
pp(teams)
这给了你:
{'Hawks': ['P. MillsapPF',
'K. BazemoreSF',
'A. HorfordC',
'J. TeaguePG',
'K. KorverSG'],
'Pistons': ['M. MorrisPF',
'E. IlyasovaPF',
'A. DrummondC',
'R. JacksonPG',
'K. Caldwell-PopeSG']}
答案 1 :(得分:0)
如果您使用熊猫而不是漂亮的汤,它将分别解析表格。它只能得到首发球员,而不是替补球员,所以希望这不是一个问题。
<?xml version="1.0" encoding="utf-8"?>
<RadioButton xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:buttonTint="@color/colorPrimary"
android:text="">
</RadioButton>