【问题标题】:Web scraping sports odds with Selenium使用 Selenium 抓取 Web 体育赔率
【发布时间】:2018-12-29 12:54:08
【问题描述】:

我开始熟悉网络抓取,并开始从事个人项目以在某些网站上自动下注。我的问题是在某些情况下页面使用 JavaScript 和其他复杂代码,所以我没有得到任何结果。我致力于的网站是“Intralot.it”。我用 Chrome 打开页面,然后寻找我感兴趣的“课程” (See Chrome inspector)。 最后,我尝试使用 Selenium 获取数据,但几乎总是什么都得不到(空列表)。只是有时,莫名其妙地,列表包含数据。我希望有人帮助我了解发生了什么以及为什么我错了。以下是我的代码:

from selenium import webdriver
from selenium.webdriver.common.by import By


link = 'https://www.intralot.it/scommesse/ma/calcio/premier_league/ref?code=1_86#989_9497_0'

driver = webdriver.Chrome()
driver.get(link)

Teams = driver.find_elements(By.CLASS_NAME, 'evento')
Odds  = driver.find_elements(By.XPATH, '//td[class = "quota group_1 ui- 
selectee"]//text()')   

for x in range (0,len(Teams)): print(Teams[x].text)
for y in range (0,len(Odds)): print(Odds[y])

【问题讨论】:

  • 该链接对我不起作用。您可以发布所需元素的 HTML 吗?
  • 虽然url 打开但我这边的网页上没有数据。是否有任何其他步骤可以查看数据?
  • 对不起,你是对的。我已经更新了链接,现在可以使用了。感谢您的关注。

标签: python-3.x selenium web-scraping


【解决方案1】:

您可以为您的元素列表尝试以下 CSS 选择器:

from selenium.webdriver.support import ui
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By


Teams = ui.WebDriverWait(driver, 10).until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR, "a.evento")))
Odds = ui.WebDriverWait(driver, 10).until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR, "tr > td:nth-child(2)")))

for x,y in zip(Teams, Odds):

    print x.text, y.text

希望对你有帮助!

【讨论】:

  • 感谢 Ratmir 的回答,代码有效,但并非总是如此。问题是,如果(例如)我运行程序 3 次,第一次从页面获取数据而其他两次没有(或者可能没有)。似乎网页以特定方式更新,Selenium 无法正确同步....
  • @Mark.Doe,我认为您需要使用显式等待。你能试试我更新的答案吗?谢谢。
  • 不客气!您可以接受我的回答(在我的回答旁边打勾)。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-04-04
  • 1970-01-01
  • 2020-11-15
  • 1970-01-01
  • 2023-02-18
  • 2020-03-01
  • 2017-05-12
相关资源
最近更新 更多