在BeautifulSoup抓取之后从Python列表中提取数据并创建Pandas表

use*_*319 5 python beautifulsoup python-3.x pandas

我一直在学习 Python 的基础知识一段时间,并认为我会继续尝试将一些东西放在一起,但似乎遇到了绊脚石(尽管到处寻找我可能会出错的地方) )。

我想从这里抢一张桌子: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")
Run Code Online (Sandbox Code Playgroud)

这似乎将每匹马和我需要的所有相应数据放入一个列表中。在这个列表中,我只需要某些位,即马名的“data-name”和当前赔率的“data-odig”。

我认为可能有某种方法可以从列表中提取数据以构建列表列表,然后在 Pandas 中构建一个数据框,但我可能会做错了这一切。

and*_*ece 5

您可以使用<tr>BeautifulSoup 对象.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
Run Code Online (Sandbox Code Playgroud)

笔记:

  • 你提供的网址对我不起作用,但这个类似的网址对我有用:https : //www.oddschecker.com/horse-racing/palermo-arg/21 : 00/winner
  • 我没有看到您提到的确切属性(data-namedata-odig),所以我使用了名称相似的属性。我对赛马知之甚少,不知道这些是否有用,但是此答案中的方法应该允许您选择任何可用的属性。