BeautifulSoup webscraping find_all():排除的元素作为最后一个元素附加

时间:2019-07-10 12:12:40

标签: python web-scraping beautifulsoup

我正在尝试从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旁边。

1 个答案:

答案 0 :(得分:1)

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())

O / P:

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