【问题标题】:Print table without HTML tags for use in calculations打印不带 HTML 标记的表格以用于计算
【发布时间】:2015-03-20 14:08:33
【问题描述】:

我正在尝试将此网站上的参与者姓名和赔率放入一个列表或表格中,然后我可以进行计算。我想在下面这样的有序输出中查看数据

1.name / odds vs name / odds
2.name / odds vs name / odds

目前我似乎只能单独抓取它们,当我打印它们时,它们仍然包含 HTML 标签。

import requests
from bs4 import BeautifulSoup

url = requests.get('http://www.oddschecker.com/tennis/match-coupon')
html = url.content
soup = BeautifulSoup(html)

odds = soup.find_all("span", "odds")
print(odds)

一旦我能够以上述格式构建数据,我希望能够对数据进行计算。

【问题讨论】:

    标签: web-scraping beautifulsoup html-parsing python-3.4


    【解决方案1】:

    我们的想法是遍历表格行(tr 存在data-market-id 属性的标签),找到所有参与者和赔率by class names。你需要通过get_text()获取元素的文本:

    工作示例:

    import requests
    from bs4 import BeautifulSoup
    
    url = requests.get('http://www.oddschecker.com/tennis/match-coupon')
    html = url.content
    soup = BeautifulSoup(html)
    
    for row in soup.find_all("tr", {"data-market-id": True}):
        participants = [item.get_text(strip=True) for item in row.find_all('span', class_='fixtures-bet-name')]
        odds = [item.get_text(strip=True) for item in row.find_all('span', class_='odds')]
    
        print participants[0], odds[0], participants[1], odds[1]
    

    打印:

    Tomas Berdych (9/4) Roger Federer (5/12)
    Milos Raonic (15/8) Rafael Nadal (8/15)
    ...
    Vera Lapko (5/6) Julia Terziyska (5/6)
    Aminat Kushkhova (11/10) Katie Swan (4/6)
    

    【讨论】:

    • 我是否认为参与者和赔率都是字符串,我需要将赔率转换为浮点数才能对其进行计算?
    • 我应该在当前脚本的哪个位置尝试将字符串转换为浮点数?我试过在这里申请'odds = [float(item.get_text)(strip=True) for item in row.find_all('span', class_='odds')]'
    • @TwiggyGarcia 试试odds = [float(item.get_text(strip=True)) for item in row.find_all('span', class_='odds')]
    • 仍然出现错误 'ValueError: could not convert string to float: '(8/15)'
    猜你喜欢
    • 2014-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多