我在这里有点新手,所以请原谅我的无知。我正在尝试获取一行代码以仅返回特定标记的元素。问题是,我的方法产生了这些各自的结果...:
for items in soup.find('td', text='Trading Symbol').parent.find_all('td'):
ticker = [items.text.strip()]
print(ticker)
['Trading Symbol']
['AAPL']
['']
和
for items in soup.find('td', text='Trading Symbol').parent.find_all('td'):
for td in items.find('td', {'class':['text']}):
ticker = [td.text.strip()]
print(ticker)
....error message....for td in items.find('td', {'class':['text']}):
TypeError: 'NoneType' object is not iterable
我了解为什么第一个代码会执行它的工作-我没有确切指定我要执行的操作(股票行情自动收录器AAPL),但我不知道为什么还要添加一行额外的代码来指定该类? t缩小列表范围。通过查看汤(我在下面提供),我认为附加的代码行将删除“交易符号”,并保留“ AAPL”和“ []”,但没有任何内容。这里有帮助吗?
这是汤。有数百个“ re”类标记,因此使用过滤可能会有所帮助,但并不是全部。
## <tr class="re">
## <td class="pl " style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="top.Show.showAR( this, 'defref_dei_TradingSymbol', window );">Trading Symbol</a></td>
## <td class="text">AAPL<span></span>
## </td>
答案 0 :(得分:0)
您已经处于td级别。 如果您希望代码段正常工作,请尝试
for td in items.parent.find('td', {'class':['text']}):
答案 1 :(得分:0)
这成功了。谢谢大家!
for item in soup.find('td', text='Trading Symbol').parent.find_all('td', {'class':['text']}):
ticker = [item.text.strip()]
print(ticker)
答案 2 :(得分:0)
对于bs4 4.7.1,您可以使用:contains以及常规的同级组合器来获取这些tds
import requests
from bs4 import BeautifulSoup as bs
r = requests.get('https://www.sec.gov/Archives/edgar/data/320193/0000320193-18-000070.txt')
soup = bs(r.content, 'lxml')
siblings = [item.text.strip() for item in soup.select('td:contains("Trading Symbol") ~ td')]
print(siblings)