【发布时间】:2019-09-23 00:27:50
【问题描述】:
有趣的问题。我正在用 selenium 抓取一个投注网站,然后用 bs4 处理。问题是,网站加载赔率信息的方式与加载球队名称的方式不同。例如:
London v Tokyo 2/1 4/1
Amsterdam v Helsinki 5/1 3/1
New York v California 7/1 10/1
当我拉取它并对其进行迭代时,结果如下:
Names = [London, Tokyo, Amsterdam, Helsinki]
Odds = [2/1, 5/1, 4/1, 3/1, 7/1, 10/1]
赔率是以不同长度的块从上到下、从左到右加载的。这意味着当我尝试将名称和赔率拼接在一起时,它们不会匹配。
我的问题是,我该如何解决这个问题?我希望最终能将信息公布出来,所以球队名称后面是它的赔率:
Games = [London, 2/1, Tokyo, 4/1, Amsterdam, 5/1, Helsinki, 3/1, New York, 7/1, California, 10/1]
** 更新 ** 网址是:https://www.bet365.com/#/AC/B151/C1/D50/E2/F163/ 如果您获得登录页面,则只需单击即可。然后是左侧面板的“电子竞技”,然后是中间页面的“所有比赛”。
代码:
from selenium import webdriver
from bs4 import BeautifulSoup
url = "https://www.bet365.com/#/AC/B151/C1/D50/E2/F163/"
driver = webdriver.Chrome()
driver.get(url)
# Then i'm navigating to the "All Matches" page
soup = BeautifulSoup(driver.page_source, 'html.parser')
teams = driver.find_elements_by_class_name("sl-CouponParticipantWithBookCloses_Name")
odds_raw = driver.find_elements_by_class_name("gl-ParticipantOddsOnly_Odds")
odds = []
teams_text = []
new_teams = []
new_odds = []
for name in teams:
teams_text.append(name.text)
团队像块一样进来,例如:“伦敦对东京”。 因此,为了将团队名称分开,我迭代并拆分它们
for name in teams_text:
first, second = name.split(" v ")
new_teams.append(first)
new_teams.append(second)
然后我将收到的赔率转换成小数:
for odd in odds_raw:
odds.append(odd.text)
for odd in odds:
first, second = odd.split("/")
new_odd = (int(first) / int(second)) + 1
new_odds.append(round(new_odd, 2))
所以现在我有一个所有团队名称的列表,以及一个十进制奇数值的列表。这就是我的问题所在。 bet365 生成比赛赔率的方式是在每个赛区的不同长度的垂直块中。
如果赔率是这样的:
Division 1
London v Tokyo 1 2
Amsterdam v Helsinki 3 4
Division 2
New York v California 5 6
Division 3
Sydney v Brisbane 7 8
Bali v Singapore 9 10
Berlin v Paris 11 12
然后当我拉它们时,几率会像这样:
[1, 3, 2, 4, 5, 6, 7, 9, 11, 8, 10, 12]
在分区长度不等的情况下,我很难弄清楚如何处理它。
【问题讨论】:
-
更新了链接和代码
-
是的,在我将其更改为小数后,我希望将其存储为:[Gen.G, 1.44, Team Envy, 2.62] 但它不是这样的
标签: python beautifulsoup selenium-chromedriver