我使用Selenium从一个简单的动态表中提取了一些足球数据,但是问题是,当我试图获取“文本中心”类名称时,它显示了许多我不想要的额外数据。
我尝试使用xpath和css_selector,但不能解决问题。
站点HTML:
数据1:得分(想要的结果为0-0)
<td class="text-center">
<a href="/r/1571269/somedata" id="r_1571269S">0-0</a>
</td>
数据2:奇数:(想要的数据:2.375)
<td class="text-center" id="o_1562530_0">2.375</td>
这是我的代码的一部分:
Score = driver.find_element_by_class_name('text-center')
for score in Score:
print("Score: "+ score.text)
如您所见,它们具有相同的类名,并且当我运行脚本时,它既显示了Togheter,又带有该类名的许多其他内容。 我也尝试通过ID查找,但是ID每次都会更改,因此没有任何意义。 你有什么建议吗?提前谢谢。
答案 0 :(得分:1)
这个问题真的不清楚...但是... 如果您有多个具有相同CSS类名称的元素,则可以在每个元素中找到这样的文本:
elements = driver.find_elements_by_class_name('text-center')
for element in elements:
print(element.text)
find_elements_*
而不是find_element_*
...复数形式返回所有匹配元素的列表。答案 1 :(得分:0)
看一下样本,一组数据在td>一个元素(分数)中,而另一组数据在td 没有 a中。这可以通过xpath轻松实现:
all_scores = driver.find_elements_by_xpath('//td[@class="text-center"]/a')
all_odds = driver.find_elements_by_xpath('//td[@class="text-center" and not(a)]') # all td elements with that class, and not having a child named "a"
该类值的确看起来太通用了-我想会有很多元素居中显示文本。
现在,看一下HTML摘录-不要放置代码的屏幕截图,请花时间复制和粘贴它们-这些td是table
元素的一部分,其ID看起来不像自动生成的ID 。因此,我将锚定元素-这些td位于表树中;例如:
//table[@id="thl_inplay"]//td[@class="text-center"]/a
//table[@id="thl_inplay"]//td[@class="text-center" and not(a)]
最后,这是一张表,您想要的值可能总是在同一列中;如果将此条件添加到xpath条件中,则可以确保定位到正确的条件。说分数是4,奇数是6:
//table[@id="thl_inplay"]//td[@class="text-center" and position()=4]/a
//table[@id="thl_inplay"]//td[@class="text-center" and not(a) and position()=6]