如何完成 NBA 球员道具的高级网络抓取?

问题描述 投票:0回答:2

我想从 https://www.bovada.lv 抓取 NBA 球员投注。我将问题命名为 ADVANCED,因为有多个团队、玩家和类别。

这里是请求的HTML代码:

https://pastebin.com/UkY071uV

这是将您直接带到篮球部分的链接:https://www.bovada.lv/sports/basketball.

开始......

NBA球员道具位于篮球区。如果您单击每个游戏旁边的箭头或“>”,它将带您到另一个投注页面。如果玩家道具已经发布,您可以在页面底部附近的玩家道具部分找到它们(注意:道具在游戏开始前发布)。

这是我正在寻找的一名球员的数据样本:

Total Points - LeBron James (LAL)
28.5     -115     -115

我想抓取所有玩家的名字、类别和投注赔率。不幸的是我没有做得太远。到目前为止我学到的方法都没有成功。

#import modules

from bs4 import BeautifulSoup
import requests, os
from selenium import webdriver

#initiate Selenium

os.chdir('C:\webdrivers')

#enter user agent

header = {'User-agent' : 'ENTER USER_AGENT HERE'}
options = webdriver.ChromeOptions(); options.add_argument("--start-maximized")
driver = webdriver.Chrome(chrome_options=options)
driver.get('https://www.bovada.lv/sports/basketball/nba')
soup = BeautifulSoup(driver.page_source, 'html.parser')
driver.quit()

#attempt at printing soup 
print(soup)

我无法在代码中找到任何相应的播放器。我认为寻求帮助不会有什么坏处。也许有更多经验的人知道该怎么做,或者可以帮助我朝着正确的方向前进。

我是网络抓取的新手,非常感谢您提供的任何帮助。提前感谢您的宝贵时间!

javascript python selenium web-scraping beautifulsoup
2个回答
2
投票

本网站使用内部 JSON api 获取数据。您的示例的完整 JSON 数据可以在这里找到:https://www.bovada.lv/services/sports/event/v2/events/A/description/basketball/nba/los-angeles-lakers-sacramento-kings -201811102200?lang=zh

使用 & 提取数据的示例:

curl -s "https://www.bovada.lv/services/sports/event/v2/events/A/description/basketball/nba/los-angeles-lakers-sacramento-kings-201811102200?lang=en" | \
     jq '.[0].events[0].displayGroups[] | 
         select(.description=="Player Props") | 
         .markets[] | 
         select(.description=="Total Points - LeBron James (LAL)")' 

使用

import requests

r = requests.get('https://www.bovada.lv/services/sports/event/v2/events/A/description/basketball/nba/los-angeles-lakers-sacramento-kings-201811102200?lang=en')

player_props = [
    t["markets"]
    for t in r.json()[0]["events"][0]["displayGroups"]
    if t["description"] == "Player Props"
]
specific_player = [
    t
    for t in player_props[0]
    if t["description"] == "Total Points - LeBron James (LAL)"
]
print(specific_player)

-2
投票

你能解决这个问题吗? @perrk 我正在尝试为 Stake.com 制作专门用于播放器道具的刮板。 你能做出任何能做到这一点的东西吗?

© www.soinside.com 2019 - 2024. All rights reserved.