beautifulsoupwebscraping find\u all():作为最后一个元素附加的排除元素

2024-10-03 06:19:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图从reuters.com检索财务信息,尤其是公司的长期增长率。我想要抓取的元素并不是出现在所有的网页上,在我的示例中不是针对Ticker'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旁边。你知道吗


Tags: import信息元素列表fbnanaeslow
1条回答
网友
1楼 · 发布于 2024-10-03 06:19:29

dataframe中的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

相关问题 更多 >