正在使用BeautifulSoup删除fanduel,找不到HTML中可见的值

2024-04-19 14:08:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图使用BeautifulSoup从fanduel中为一场典型的棒球比赛划出一条线,但我发现(正如this person所做的那样),当我尝试一些标准的东西时,很多数据都没有显示出来

import requests
from bs4 import BeautifulSoup
page = requests.get(<some url>)
soup = BeautifulSoup(page.content, 'html.parser')

我知道我可以获得do Dev工具->;网络选项卡->;XHR获取包含站点正在使用的数据的json,但我无法找到与HTML中相同的值

我会举一个例子,但一天后可能会不好,因为页面将消失。这是明天Rangers Dodgers game的在线页面。你可以点击并看到(截至目前为止)道奇队的赔率为-1.5,为-146。我想删掉这个数字(-146),但在json数据中找不到它

你知道我如何在json或HTML中找到这种东西吗?谢谢


Tags: 数据importgtjson标准htmlpage页面
2条回答

这可能发生在您身上,因为某些网页使用java脚本加载元素,在这种情况下,您使用请求接收的html源可能不包含所有元素。您可以通过右键单击页面并选择“查看源”来检查这一点,如果您需要的数据在源文件中,您可以使用Beautiful Soup解析它,否则为了获得动态加载的内容,我建议selenium

看起来我为你的参考链接提供了解决方案。这些行在json中,只是“原始”形式,所以需要计算出来:

import requests

jsonData = requests.get('https://sportsbook.fanduel.com/cache/psevent/UK/1/false/1027510.3.json').json()
money_line = jsonData['eventmarketgroups'][0]['markets'][1]['selections']

def calc_spread_line(priceUp, priceDown, spread):
    if priceDown < priceUp:
        line = int((priceUp / priceDown) * 100)
        spread = spread*-1
    else:
        line = int((priceDown / priceUp) * -100)
    return line, spread


for each in money_line:
    priceUp = each['currentpriceup']
    priceDown = each['currentpricedown']

    team = each['name']
    spread = each['currenthandicap']
    line, spread = calc_spread_line(priceUp, priceDown, spread)
    print ('%s: %s %s' %(team, spread, line))

输出:

Texas Rangers: 1.5 122
Los Angeles Dodgers: -1.5 -146

否则,您可以按照建议使用selenium并以这种方式解析html。不过,这会降低效率

相关问题 更多 >