我正在尝试从一个汇总的网站上收集有关赌博赔率的数据。有时,网站上的体育博彩源中没有特定游戏的赔率,因此汇总的网站显示破折号或连字符(“-”)。我的搜寻器将此连字符值返回为空,这使我的for循环搞砸了。
当我抓紧时间时,如果有可能,我的代码可以正常工作。如果不存在赔率,并且网站显示“-”,则响应为空。我尝试使用.text
和.get_attribute("innerText")
,但找不到其他可以返回文本的方法。
这是有效的元素:
<section class="_2NFWr" data-vertical-sbid="279" style="">
<main class="_2ZO4X">
<div class="_3h0tU _3ptK- _1qU_1">
<span class="_3YgRM _1QEDd">
<span class="">+145</span>
</span>
</div>
<div class="_3h0tU _3ptK- _1qU_1 _1YNCg">
<span class="_3YgRM _1QEDd">
<span class="">-155</span>
</span>
</div>
</main>
</section>
我的代码:
away_odds = odds_element.find_element_by_css_selector('div._3h0tU._3ptK-._1qU_1')
away_odds = away_odds.text
home_odds = odds_element.find_element_by_css_selector('div._3h0tU._3ptK-._1qU_1._1YNCg')
home_odds = home_odds.text
print "Away Odds: "+ away_odds
print "Home Odds: "+ home_odds
返回:
Away Odds: +145
Home Odds: -155
这是无效的部分
<section class="_2NFWr" data-vertical-sbid="1602" style="">
<main class="_2ZO4X">
<div class="_3h0tU _3ptK-">
<span class="_3YgRM _1QEDd">
<span class="">-</span>
</span>
</div>
<div class="_3h0tU _3ptK- _1YNCg">
<span class="_3YgRM _1QEDd">
<span class="">-</span>
</span>
</div>
</main>
</section>
我的代码相同,并且响应为空。这会中断我用来与页面进行交互的while循环,并过早停止它。
我也尝试了以下方法:
从嵌套类中抓取
away_odds = odds_element.find_element_by_css_selector('div._3h0tU._3ptK-._1qU_1')
away_odds = away_odds.find_element_by_css_selector('span._3YgRM._1QEDd')
away_odds = away_odds.text
home_odds = odds_element.find_element_by_css_selector('div._3h0tU._3ptK-._1qU_1._1YNCg')
home_odds = home_odds.find_element_by_css_selector('span._3YgRM._1QEDd')
home_odds = home_odds.text
并使用Inner Text
属性
away_odds = odds_element.find_element_by_css_selector('div._3h0tU._3ptK-._1qU_1')
away_odds = away_odds.get_attribute('innerText')
home_odds = odds_element.find_element_by_css_selector('div._3h0tU._3ptK-._1qU_1._1YNCg')
home_odds = home_odds.get_attribute('innerText')
在这两种情况下,我仍然从代码中的“-”中得到一个空值
我希望代码输出文本值“-”
答案 0 :(得分:0)
away_odds = odds_element.find_element_by_css_selector('div._3h0tU._3ptK-._1qU_1')
与
away_odds = odds_element.find_element_by_css_selector('_3h0tU _3ptK- _1YNCg')
和
away_odds = odds_element.find_element_by_css_selector('_3YgRM _1QEDd')
我的建议是,您首先分析网站中的模式,然后获取值。
例如,执行此操作
parent_list=driver.find_elements_by_class('name of main class')
child1=parent_list[0].find_elements_by_class('name of inner class')
grand_child= ____same thing follows___
明智地使用find_elements_by
。您可以在最恶劣的动态环境中使用XPath和CSS Selector。
答案 1 :(得分:0)
看起来赔率包裹在<span class="_3YgRM _1QEDd">
元素中。您可以使用find_elements_by_css_selector
来获取列表。
例如(假设上面的HTML在your_local.html
中:
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("file:///C:/your_local.html")
away_odds = driver.find_elements_by_css_selector('span._3YgRM._1QEDd')
for element in away_odds:
print(element.text)
#=> +145
#=> -155
#=> -
#=> -