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

标签 python python-3.x pandas beautifulsoup

我已经学习了一段时间的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
笔记:
  • 您提供的网址对我不起作用,但是这个类似的网址却起作用:https://www.oddschecker.com/horse-racing/palermo-arg/21:00/winner
  • 我没有看到您提到的确切属性(data-namedata-odig),因此我使用了名称相似的属性。我对赛马了解不多,是否知道它们是否有用,但是此答案中的方法应允许您选择任何可用的属性。
  • 关于python - 在BeautifulSoup抓取之后,从Python列表中提取数据,并创建Pandas表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63818083/

    相关文章:

    python - 如何对python字典的每个键的值进行排序?

    python - python中的列表切片问题

    python - 合并具有不同索引的 3 个数据帧

    python - 寻找一个 GUI 应用程序来输入 linux 命令

    python - 如何在 Flask API 路由系统中定义基本路由

    python - Kivy 高斯模糊

    python - pandas DataFrame 和 pandas.groupby 计算工资

    python - Pandas:使用 python 检查值是否为纪元时间

    python - Seaborn Pairgrid : How to share all axes for all off-diagonal plots (i. e 每个地 block 与其镜像共享轴)?

    python - 并行化我的 python 程序