如何删除除数字以外的所有内容(韩国公司的网络爬虫市值)
how to delete everything but numbers (web crawling market cap of Korean Company)
求助,这个苦苦挣扎的哲学经济学专业的人。
我正在尝试从韩国网站获取三星电子的市值 'finance.naver.com'
(不一定是三星,我只是为了我的quant投资目的而需要爬取市值)
网站是
https://finance.naver.com/item/main.nhn?code=005930
这是网页图片,目标编号在红框内
这是我的代码
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'标签中,'_market_sum'id
em_id = mkc.find("em", {"id":"_market_sum"})
最后我得到了这样的结果
'조'是韩币的单位所以我想删掉数字以外的所有内容,但我不知道如何
我所做的是将结果放入 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)
它变得越来越丑陋
我在这个时候点了出来
请帮忙!!!
感谢您的仁慈、智慧和慷慨
定义 em_id
后,通过执行
摆脱它的标签
em_txt = em_id.get_text()
然后,您可以使用(感谢 this answer)
去除空格
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]
另一种解决方案是使用 regex
and re.findall
,考虑以下虚拟 DataFrame:
df = pd.DataFrame({'Extract' : ['Total revenue for this year is ,000, for last year it was 00',
'and profit in USD is 00.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]
求助,这个苦苦挣扎的哲学经济学专业的人。
我正在尝试从韩国网站获取三星电子的市值 'finance.naver.com'
(不一定是三星,我只是为了我的quant投资目的而需要爬取市值)
网站是 https://finance.naver.com/item/main.nhn?code=005930
这是网页图片,目标编号在红框内
这是我的代码
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'标签中,'_market_sum'id
em_id = mkc.find("em", {"id":"_market_sum"})
最后我得到了这样的结果
'조'是韩币的单位所以我想删掉数字以外的所有内容,但我不知道如何
我所做的是将结果放入 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)
它变得越来越丑陋
我在这个时候点了出来
请帮忙!!!
感谢您的仁慈、智慧和慷慨
定义 em_id
后,通过执行
em_txt = em_id.get_text()
然后,您可以使用(感谢 this answer)
去除空格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]
另一种解决方案是使用 regex
and re.findall
,考虑以下虚拟 DataFrame:
df = pd.DataFrame({'Extract' : ['Total revenue for this year is ,000, for last year it was 00',
'and profit in USD is 00.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]