无法从beautifulsoup中的html表中删除/n



这是我试图实现的函数:

#Accessing webpage containing list
def save_r1000_tickers():
resp = requests.get('https://en.wikipedia.org/wiki/Russell_1000_Index')
soup = bs.BeautifulSoup(resp.text, features="lxml")
table = soup.find('table', {'class' : 'wikitable sortable'})
tickers = []
#look at all table rows starting with 2nd row (1st = table header)
for row in table.findAll('tr')[1:]:
#extract 2nd column
ticker = row.findAll('td')[1].text
tickers.append(ticker)

with open("r1000.pickle", "wb") as f:
pickle.dump(tickers,f)
print(tickers)
return tickers
save_r1000_tickers()

出于某种原因,这将以以下格式返回文本:'GNTX\n'、'GPC\n'、'GILD\n'、

我尝试过不同的策略来消除它,但还没有成功地消除它。这似乎应该很简单,但由于某种原因,我无法解决它。

例如,我发现了一个教程,他们在其中使用了类似的网络抓取策略:

for cell in tr:
th = cell.find_all('th')
th_data = [col.text.strip('n') for col in th]
td = cell.find_all('td')
row = [i.text.replace('n','') for i in td]
writer.writerow(th_data+row)      

然而,当我尝试以以下方式添加时:

td = row.findAll('td')[1].text
ticker = [i.text.replace('n','') for i in td]
tickers.append(ticker)

我得到错误";AttributeError:"str"对象没有属性"text"。我真的不明白幕后发生了什么,也就是说,为什么股票代码(我认为是一个字符串(没有属性文本。。。很明显,我是蟒蛇的新手。

如有任何帮助,我们将不胜感激,提前感谢。

通过在row.findAll('td')之后包含[1].text,可以检索findAll返回的列表中第一个项目的文本。卸下它应该可以工作。此外,replace('n','')可以替换为strip():

td = row.findAll('td')
ticker = [i.text.strip() for i in td]
tickers.append(ticker)

最新更新