我已经学习了一段时间的Python基础知识,并认为我会继续尝试将一些东西放在一起,但是似乎遇到了绊脚石(尽管到处都是看看我可能出了问题的地方) )。
我正在尝试从这里抓一张 table :https://www.oddschecker.com/horse-racing/2020-09-10-chelmsford-city/20:30/winner
现在,我意识到该表并未列出普通HTML的典型情况,因此,尝试使用Pandas抓取它不会产生结果。因此,深入研究BeautifulSoup尝试获得结果。
看来我需要的所有数据都在“diff-row evTabRow bc”类中,因此编写了以下内容:
url = requests.get('https://www.oddschecker.com/horse-racing/2020-09-10-haydock/14:00/winner')
soup = BeautifulSoup(url.content, 'lxml')
table = soup.find_all("tr", class_="diff-row evTabRow bc")
这似乎把每匹马和我需要的所有相应数据放到一个列表中。在此列表中,我只需要某些位,即“data-name”(马名)和“data-odig”(当前赔率)。我认为可能有某种方法可以从列表中提取数据以构建列表列表,然后在Pandas中构建数据框,但我可能会犯错。
最佳答案
您可以使用BeautifulSoup对象的 <tr>
属性访问任何.attrs
属性。
一旦有了table
,就遍历每个条目,将所需的属性作为字典列表拉出。然后使用结果列表初始化Pandas数据框。
horse_attrs = list()
for entry in table:
attrs = dict(name=entry.attrs['data-bname'], dig=entry.attrs['data-best-dig'])
horse_attrs.append(attrs)
df = pd.DataFrame(horse_attrs)
df
name dig
0 Las Farras 9999
1 Heat Miami 9999
2 Martin Beck 9999
3 Litran 9999
4 Ritmo Capanga 9999
5 Perfect Score 9999
6 Simplemente Tuyo 9999
7 Anpacai 9999
8 Colt Fast 9999
9 Cacharpari 9999
10 Don Leparc 9999
11 Curioso Seattle 9999
12 Golpe Final 9999
13 El Acosador 9999
笔记:data-name
和data-odig
),因此我使用了名称相似的属性。我对赛马了解不多,是否知道它们是否有用,但是此答案中的方法应允许您选择任何可用的属性。 关于python - 在BeautifulSoup抓取之后,从Python列表中提取数据,并创建Pandas表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63818083/