我正在尝试使用 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 中找到那种东西吗?谢谢!
答案 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