Какие ошибки в отношении Beautiful Soup? - PullRequest
0 голосов
/ 08 марта 2020

Я попытался удалить таблицу с BeautifulSoup, и из 4 моих попыток первые 3 не работают, я не знаю почему!

В четвертом подходе я попытался использовать pandas, но результаты больше не указываются c.

import requests
import bs4

res = requests.get(
    "https://www.moneycontrol.com/stocks/marketstats/industry-classification/bse/aerospace-defence.html")

soup = bs4.BeautifulSoup(res.text, 'lxml')

# 1st try by copy selector from inspect element
table = soup.find_all(
    '#mc_content > section > section > div.clearfix.stat_container > div.columnst.FR.wbg.brdwht > div > div.bsr_table.hist_tbl_hm.PR.Ohidden')
print(table)
# 2nd try by specifically writing class by attribute method
table = soup.find_all(
    'div', attrs={'class': 'bsr_table.hist_tbl_hm.PR.Ohidden'})
print(table)
# 3rd conventional style
table = soup.find('table')
table_rows = table.find('tr')
for tr in table_rows:
        td = tr.find_all('td')
        row = [i.text() for i in td]
        print(td)
import pandas as pd

# 4th by pandas

dfs = pd.read_html(
    'https://www.moneycontrol.com/stocks/marketstats/industry-classification/bse/aerospace-defence.html')
for df in dfs:
        print(df)

Вывод, который я получил:

0   Hindustan Aeron  Add to  Watchlist | Portfolio...  ...      627.53
1                                               5-Day  ...         NaN
2                                              10-Day  ...         NaN
3                                              30-Day  ...         NaN
4                                               3-Day  ...         NaN
5                                               5-Day  ...         NaN
6                                               8-Day  ...         NaN
7   TAAL Enterprise  Add to  Watchlist | Portfolio...  ...      135.34
8                                               5-Day  ...         NaN
9                                              10-Day  ...         NaN
10                                             30-Day  ...         NaN
11                                              3-Day  ...         NaN
12                                              5-Day  ...         NaN
13                                              8-Day  ...         NaN
14  Taneja Aerospac  Add to  Watchlist | Portfolio...  ...       21.76
15                                              5-Day  ...         NaN
16                                             10-Day  ...         NaN
17                                             30-Day  ...         NaN
18                                              3-Day  ...         NaN
19                                              5-Day  ...         NaN
20                                              8-Day  ...         NaN

Но вывод, который я хочу:

is a data frame having columns 1)Open 2) High 3) Low 4) Price 5)Current Price 6) Percent change 7) Sector:- aerospace defence.

Спасибо, что ответили на сомнение и способствовали ему.

1 Ответ

1 голос
/ 08 марта 2020

По сути, страница загружается через JavaScript, поэтому вы не можете использовать модуль requests для анализа JS, который равен rendered динамически после загрузки страницы.

Вы можете использовать selenium для такой задачи. в противном случае вы можете сделать это с помощью HTMLSession из requests_html модуля, который отображает JavaScript на лету.

from selenium import webdriver
from selenium.webdriver.firefox.options import Options
import pandas as pd

options = Options()
options.add_argument('--headless')
driver = webdriver.Firefox(options=options)

driver.get("https://www.moneycontrol.com/stocks/marketstats/industry-classification/bse/aerospace-defence.html")


df = pd.read_html(driver.page_source)[0]

print(df)
df.to_csv("result.csv", index=False)

driver.quit()

вывод: VIEW-ONLINE

                                        Company Name  ...  5 Day Performance -18.45 (-2.7%)  03-Mar-20  6...  5 Day Performance  Volume  Lower Circuit  Upper Circuit  VWAP  SMA Deliver -0.3 (-0.19%)  03-Mar-20  15...ables  P/E  P/B                                                             0.55 (2.26%)  03-Mar-20  24.4...
0  Hindustan Aeron  Add to  Watchlist | Portfolio...  ...  02-Mar-20  666.10 -18.45 (-2.7%)  03-Mar-20  6...
1  TAAL Enterprise  Add to  Watchlist | Portfolio...  ...  02-Mar-20  160.00 -0.3 (-0.19%)  03-Mar-20  15...
2  Taneja Aerospac  Add to  Watchlist | Portfolio...  ...  02-Mar-20  24.90 
0.55 (2.26%)  03-Mar-20  24.4...

[3 rows x 9 columns]

enter image description here

Примечание: обратите внимание, что pd.read_html фактически возвращает список. так что вам не нужно л oop над ним. Вы можете просто индексировать его, например, df[0].

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