BeautifulSoup webscraping find_all (): исключенный элемент добавляется как последний элемент - PullRequest
1 голос
/ 10 июля 2019

Я пытаюсь получить финансовую информацию из 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, где Reuters не предоставляет никакой информации, вместо этого устанавливается Скорость роста FLS (19.04). Таким образом, в результате вся информация сдвигается вверх на один индекс, где рядом с AMCR должно появиться NaN.

1 Ответ

1 голос
/ 10 июля 2019

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...