美丽汤网页抓取 find_all( ):作为最后一个元素附加的排除元素



我正在尝试从reuters.com中检索财务信息,尤其是公司的长期增长率。我要抓取的元素不会出现在所有网页上,在我的示例中不是用于股票代号'AMCR'。所有抓取的信息都应附加到列表中。

我已经想出如果元素不存在,则排除该元素,但是不是将其附加到列表中应该在的位置,而是将"NaN"作为最后一个元素附加,而不是在它应该在的位置。

import requests 
from bs4 import BeautifulSoup
LTGRMean = []
tickers = ['MMM','AES','LLY','LOW','PWR','TSCO','YUM','ICE','FB','AAPL','AMCR','FLS','GOOGL','FB','MSFT']
Ticker LTGRMean
0     MMM     3.70
1     AES     9.00
2     LLY    10.42
3     LOW    13.97
4     PWR    12.53
5    TSCO    11.44
6     YUM    15.08
7     ICE     8.52
8      FB    19.07
9    AAPL    12.00
10   AMCR    19.04
11    FLS    16.14
12  GOOGL    19.07
13     FB    14.80
14   MSFT      NaN

我的单个文本"not existing"没有显示。

而不是路透社没有提供任何信息的AMCR,而是设定了FLS(19.04)的增长率。因此,结果,所有信息都向上移动了一个索引,其中NaN应该出现在 AMCR 旁边。

数据帧中的 Stack() 函数将列堆叠到级别 1 的行中。

import requests
from bs4 import BeautifulSoup
import pandas as pd
LTGRMean = []
tickers = ['MMM', 'AES', 'LLY', 'LOW', 'PWR', 'TSCO', 'YUM', 'ICE', 'FB', 'AAPL', 'AMCR', 'FLS', 'GOOGL', 'FB', 'MSFT']
for i in tickers:
Test = requests.get('https://www.reuters.com/finance/stocks/financial-highlights/' + i)
ReutSoup = BeautifulSoup(Test.content, 'html.parser')
td = ReutSoup.find('td', string="LT Growth Rate (%)")
my_dict = {}
#validate td object not none
if td is not None:
result = td.findNext('td').findNext('td').text
else:
result = "NaN"
my_dict[i] = result
LTGRMean.append(my_dict)
df = pd.DataFrame(LTGRMean)
print(df.stack())

操作/操作:

0   MMM       3.70
1   AES       9.00
2   LLY      10.42
3   LOW      13.97
4   PWR      12.53
5   TSCO     11.44
6   YUM      15.08
7   ICE       8.52
8   FB       19.90
9   AAPL     12.00
10  AMCR       NaN
11  FLS      19.04
12  GOOGL    16.14
13  FB       19.90
14  MSFT     14.80
dtype: object

相关内容

最新更新