繁体   English   中英

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

[英]Scraping fanduel with BeautifulSoup, can't find values visible in HTML

我正在尝试使用 BeautifulSoup 从fanduel为典型的棒球比赛刮线,但我发现(就像这个人所做的那样)当我尝试像这样的标准时,大部分数据都没有显示

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

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

我会举一个例子,但一天后它可能不会好,因为页面会消失。 这是明天游骑兵道奇队比赛的线路页面。 您可以点击查看(截至目前)道奇队在 -1.5 的赔率是 -146。 我想刮掉那个数字(-146),但我在 json 数据的任何地方都找不到它。

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

看起来我为您那里的参考链接提供了解决方案。 这些行在 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))

Output:

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM