Python,BeautifulSoup-如果没有同级元素也无法获取特定元素的文本

时间:2019-05-27 01:36:05

标签: python html web-scraping beautifulsoup tags

我在这里有点新手,所以请原谅我的无知。我正在尝试获取一行代码以仅返回特定标记的元素。问题是,我的方法产生了这些各自的结果...:

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>

3 个答案:

答案 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)