选择合适的CSS选择器

时间:2017-02-16 12:58:46

标签: python-3.x css-selectors beautifulsoup

我试图从Diluted EPS (ttm)中找到适当的CSS选择器:

https://finance.yahoo.com/quote/AAPL/key-statistics?ltr=1]

为股票价格本身找到正确的CSS选择器很简单,我只是进入开发人员工具,寻找所需的值并复制CSS选择器。当我这样做寻找上面提到的值时,我收到以下内容:

div.Mb\(10px\):nth-child(4) > div:nth-child(4) > table:nth-child(2) > tbody:nth-child(1) > tr:nth-child(7) > td:nth-child(2)

然而,使用beautifulsoup模块,该行无法在Python中提供所需的值。

如果我真的用我的值复制该行,它会给出:

<td class="Fz(s) Fw(500) Ta(end)">8.31</td>

如何选择正确的CSS选择器来获取我的特定值?

我对Python相当新,请原谅这个问题。 提前致谢

2 个答案:

答案 0 :(得分:0)

CSS选择器的设计仅用于选择元素,永远不会找到它们的内容,因为它们在样式中是必需的。使用CSS选择器,您只能告诉BeautifulSoup找到您要查找的元素,而不是元素的内容。但是,要检索元素的实际内容(标记之间的值),必须使用 contents 属性。

在您的情况下,您似乎希望使用以下代码来检索值(插入您自己的选择器):

soup.select("YOUR-SELECTOR-HERE").contents
>>> 8.33

你的选择器对我不起作用,但这可能有很多原因,所以你可以在那里填写你的工作选择器。

答案 1 :(得分:0)

在您提供的页面上,类属性不会单独标识页面上的元素。

@ felix-guo在评论中提到;你需要使用第n个元素遍历汤的树来访问数据。

尝试以下方面的内容:

all_tables = soup.find_all('table', {'class': 'table-qsp-stats'})
income_statements = all_tables[4]
diluted_eps = income_statements.find_all('tr')[6].find_all('td')[1].get_text()