как удалить все, кроме цифр (рыночная капитализация корейской компании в Интернете) - PullRequest
1 голос
/ 25 марта 2020

Пожалуйста, помогите, этот бедный, трудолюбивый, специализирующийся на философии и экономике человек.

Я пытаюсь получить рыночную капитализацию Samsung Electronics с корейского сайта «finance.naver.com»

(Это не должен быть Samsung, мне просто нужно просканировать marketcap для моей количественной инвестиционной цели)

веб-сайт https://finance.naver.com/item/main.nhn?code=005930

это изображение веб-страницы и целевой номер в красном поле enter image description here

это мой код

from bs4 import BeautifulSoup
import requests
mkc_url = 'https://finance.naver.com/item/main.nhn?code=005930'
mkc_result = requests.get(mkc_url)
mkc_obj = BeautifulSoup(mkc_result.content, "html.parser")

Я нашел целевой номер в теге 'div', 'first' class

mkc = mkc_obj.find("div",{"class": "first"})

в теге 'div', я обнаружил, что число находится в теге 'em', id _market_sum

em_id = mkc.find("em", {"id":"_market_sum"})

finanlly я получил такой результат

enter image description here

'조' - мера корейской валюты, поэтому я хотел удалить все, кроме цифр, но я не сделал не знаю, как

Я поместил этот результат в DataFrame и попытался удалить все, кроме чисел, используя .str.strip

df_mkc = pd.DataFrame(em_id)
df_mkc[0] = df_mkc[0].str.strip('\n')
df_mkc[0] = df_mkc[0].str.strip('\t')
df_mkc[0] = df_mkc[0].str.strip()
df_mkc = df_mkc.replace({'\$': '', ',': ''}, regex=True)

и это становится все более и более уродливым

enter image description here

В этот момент я отключился

Пожалуйста, помогите !!!

Спасибо за всю вашу доброту, мудрость и щедрость

Ответы [ 2 ]

2 голосов
/ 25 марта 2020

После того как вы определили 'em_id', избавьтесь от его тегов, выполнив

em_txt = em_id.get_text()

, затем вы можете избавиться от пробелов с помощью (благодаря этому ответу )

clean_em = "".join(line.strip() for line in em_txt.split("\n"))

наконец, если валюта всегда будет одинаковой, вы можете создать список с двумя числовыми значениями, выполнив

mcap_list = clean_em.split('조')

, в котором вы можете захотеть избавиться от запятой '4,299', выполнив

mcap_list[1] = mcap_list[1].replace(",","")

и преобразовав значения в целые числа с помощью

for i in range(len(mcap_list)):
    mcap_list[i] = int(mcap_list[i])

Теперь у вас есть mcap_list, равный [290,4299]

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

Другое решение заключается в использовании regex и re.findall, учитывая следующий фиктивный кадр данных:

df = pd.DataFrame({'Extract' : ['Total revenue for this year is $10,000, for last year it was $8000',
                                'and profit in USD is $2000.00','it is 20.00%',
                                'This is in Korean currency 500조']})

df['Numbers'] = df['Extract'].str.findall(r'(\d+[.,]?\d*)')

print(df['Numbers')

0    [10,000, 8000]
1         [2000.00]
2           [20.00]
3             [500]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...