Как очистить данные из второй таблицы в URL-адресе? - PullRequest
0 голосов
/ 17 июня 2020

Извините, если это супер-глупый вопрос, но я попробовал несколько вещей, и мои попытки (и) показаны ниже.

from bs4 import BeautifulSoup
import requests

for page in range(1,5):
    r=requests.get('https://etfdb.com/screener/#tab=returns&page=' + page)
    data = r.text
    soup = BeautifulSoup(data, "html.parser")

    table = soup.find("table", {"class":"table table-bordered table-hover table-striped mm-mobile-table"})

    A=[]
    B=[]
    C=[]
    D=[]
    E=[]
    F=[]
    G=[]
    H=[]

    for row in table.findAll("tr"):
        for cell in row("td"):
            #print (cell.get_text().strip())
            A.append(cell[0].get_text().strip())
            B.append(cell[1].get_text().strip())
            C.append(cell[2].get_text().strip())
            D.append(cell[3].get_text().strip())
            E.append(cell[4].get_text().strip())
            F.append(cell[5].get_text().strip())
            G.append(cell[6].get_text().strip())
            H.append(cell[7].get_text().strip())

df=pd.DataFrame(A,columns=['Symbol'])
df['ETF_Name']=B
df['1_Week']=C
df['4_Week']=D
df['YTD']=E
df['1_Year']=F
df['3_Year']=G
df['5_Year']=H
df

Я считаю, что имя соответствующей таблицы - ' стол-стол-граница стол-парящий стол-полосатый мм-мобильный-стол '. Проблема в том, что, похоже, существует несколько таблиц с одинаковым именем, и мой код получает данные из первой таблицы, но мне нужны данные из другой таблицы, которая, как мне кажется, является второй таблицей. Таблица, из которой я хочу загрузить данные, выглядит следующим образом («Возвращает», а не «Обзор»).

enter image description here

Ответы [ 2 ]

2 голосов
/ 18 июня 2020

Вариант ответа @Andrej Kesely, чтобы сделать его немного проще.

Взяв его

data = requests.post(url, json=json_data, headers=headers).json()

, вы можете использовать вместо этого:

   df = pd.DataFrame.from_dict(data['data'])
   df.drop(df.columns[[0, 1, 6,9]], axis = 1, inplace = True) 
   df

Вывод:

    mobile_title                    ytd     one_week_return     four_week_return    three_ytd   five_ytd
0   SPY - SPDR S&P 500 ETF         -2.19%   -2.44%               7.19%              36.10%      65.39%
1   IVV - iShares Core S&P 500 ETF  -2.22%  -2.46%               7.20%              36.60%      65.41%

et c.

2 голосов
/ 17 июня 2020

Данные загружаются динамически через JavaScript. Вы можете использовать модуль requests для загрузки данных, например:

import json
import requests
from bs4 import BeautifulSoup


url = 'https://etfdb.com/api/screener/'
json_data = {"tab":"returns","page":1,"only":["meta","data",None]}
headers = {'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:77.0) Gecko/20100101 Firefox/77.0', 'Accept':'application/json'}

for page in range(1, 5):  # <-- increase this to desired number of pages

    json_data['page'] = page
    data = requests.post(url, json=json_data, headers=headers).json()

    # uncomment this to print all data:
    # print(json.dumps(data, indent=4))

    # print some data to screen:
    for d in data['data']:
        print('{:<5}{:<50}{:>9}{:>9}{:>9}'.format(d['symbol']['text'], d['name']['text'], d['ytd'], d['one_week_return'], d['four_week_return']))

Печать:

SPY  SPDR S&P 500 ETF                                     -2.19%   -2.44%    7.19%
IVV  iShares Core S&P 500 ETF                             -2.22%   -2.46%    7.20%
VTI  Vanguard Total Stock Market ETF                      -2.58%   -2.45%    7.88%
VOO  Vanguard S&P 500 ETF                                 -2.28%   -2.49%    7.15%
QQQ  Invesco QQQ                                          14.47%   -0.18%    7.05%
AGG  iShares Core U.S. Aggregate Bond ETF                  5.85%    0.48%    0.82%
VEA  Vanguard FTSE Developed Markets ETF                 -10.34%   -2.46%    9.68%
IEFA iShares Core MSCI EAFE ETF                          -10.36%   -2.37%   10.05%
GLD  SPDR Gold Trust                                      13.54%    0.61%   -1.22%
VUG  Vanguard Growth ETF                                  10.29%   -0.73%    7.44%
VWO  Vanguard FTSE Emerging Markets ETF                  -11.31%   -2.48%    7.16%
BND  Vanguard Total Bond Market ETF                        5.84%    0.42%    0.82%
IWF  iShares Russell 1000 Growth ETF                       8.62%   -0.90%    6.99%

... etc.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...