用BeautifulSoup 抓取fanduel,找不到HTML 中可见的值

时间:2021-06-11 07:24:43

标签: javascript python json web-scraping beautifulsoup

我正在尝试使用 BeautifulSoup 从 fanduel 中抓取典型棒球比赛的台词,但我发现(正如 this person 所做的那样)当我尝试标准操作时,大部分数据都没有显示喜欢

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

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

我会举一个例子,但一天后它可能不会好,因为页面将消失。这是明天 Rangers Dodgers game 的在线页面。您可以单击并查看(截至目前)道奇队在 -1.5 的赔率是 -146。我想抓取该数字 (-146),但在 json 数据中的任何地方都找不到它。

知道如何在 json 或 HTML 中找到那种东西吗?谢谢!

2 个答案:

答案 0 :(得分:2)

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

UPDATE desination
SET col3 = val3,
    col4 = val4
WHERE col1 = val1
  AND col2 = val2

输出:

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))

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

答案 1 :(得分:0)

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