我试图从以下网址获取数据:http://www.boerse-frankfurt.de/de/etfs/ishares+msci+world+momentum+factor+ucits+etf+DE000A12BHF2
我要查找的数据类型位于名为singlebox list_component
的类中。让我们说我想提取总费用率(0.30%)。它位于名为td class
的{{1}}中。
但如果我这样做:
right column-datavalue lastColOfRow
我明白了:
dues = driver.find_element_by_class_name("right column-datavalue lastColOfRow ")
expense_ratio = re.search(r"(.{4})(?=%)", dues.text).group(0).encode("utf-8")
并且添加到此问题,似乎有InvalidSelectorError: Compound class names not permitted
的多个实例,因此它不会作为唯一标识符。
注意:如果使用right column-datavalue lastColOfRow
代替BeautifulSoup
更好地解决了这个问题,请告知我们。
答案 0 :(得分:1)
您可以使用find_element_by_css_selector()
来匹配多个CSS类的元素:
dues = driver.find_element_by_css_selector(".right.column-datavalue.lastColOfRow")
但是你声称上面的选择器不是唯一的,你可以使用xpath来匹配那些考虑顺序的CSS类(我发现这个xpath在那个网页上是唯一的):
xpath = "//td[@class='right column-datavalue lastColOfRow']"
dues = driver.find_element_by_xpath(xpath)
使用xpath解决此问题的另一种方法是选择跟随另一个<td>
文本<td>
之后的Gesamtkostenquote
元素:
xpath = "//td[@class='column-datacaption' and normalize-space(text())='Gesamtkostenquote']/following-sibling::td"
dues = driver.find_element_by_xpath(xpath)