我正在尝试从这样的比赛页面中抓取赔率数据: https://www.oddsportal.com/soccer/germany/bundesliga/freiburg-dortmund-WAyMx9XS/#over-under;2
可以看出,此页面允许扩展多个 Over/Under Sections,它们都包含在如下两个动态 URL 后面:
大于/小于 0,5:https://www.oddsportal.com/soccer/germany/bundesliga/freiburg-dortmund-WAyMx9XS/#over-under;2;0.50;0
大于/小于 1:https://www.oddsportal.com/soccer/germany/bundesliga/freiburg-dortmund-WAyMx9XS/#over-under;2;1.00;0
我像这样循环浏览这些不同的页面:
o_u_types= [0.50,1.00,1.50,1.75,2.00,2.25,2.50,2.75,3.00,3.50,4.00,4.50,5.50,6.50]
for i in o_u_types:
url_appendix="/#over-under;2;{};0".format(i)
o_u_type= i
o_u_match_url= str(link)+str(url_appendix) #Link is the "base link" of the match
print(o_u_match_url)
try:
self.openmatch(o_u_match_url) #Function to open the resulting match URL
time.sleep(1)
self.driver.refresh()
现在我想从表格的每一行中检索 Bookmaker、Over 和 Under 的值。问题是包含这些元素的 td 和 tr 元素的 id 随每一行而变化,我无法找出最有效的方法来处理这个.. 以博彩公司为例,我尝试了以下两个(FFI 是一个通过 xpath 查找元素的函数):
for j in range(1,15): # This serves to loop through each and every possible bookmaker, as the td are increasing up to 15 values within one over/under section
Book = self.ffi('///*[contains(@id,"table")]/tbody/tr[{}]/td[1]/div/a[2])'.format(j)) # first bookmaker name
Book=self.driver.find_element_by_css_selector("[id$='odds-data-table']>tbody>tr:nth-of-type({})>td:nth-of-type(2)").format(j)
然而,这些都不会给我带来价值..
到目前为止,唯一对我有用的是:
for x in range(1,28):
for j in range(1,15):
Book = self.ffi('//*[@id="odds-data-table"]/div[{}]/table/tbody/tr[{}]/td[1]/div/a[2]'.format(x,j)) # first bookmaker name
正如您可能看到的,这会产生很多不必要的循环,因为许多 x,j 组合是不存在的 tr-td 组合,因此返回“无”。这些不必要的循环严重影响了我的程序的性能。
您能帮我找出处理大/小部分中这些不同的 tr、td 数字的正确方法吗? 如果需要,我很乐意提供更多意见!