반응형
어딜가도 테마별 주식이 엑셀로 쉽게 볼수 있는 곳이 없었다.
그래서 하기로 했다.
일단, 네이버 금융의 테마별 시세를 들어간다.
(네이버 금융 -> 국내 증시 -> 주요시세정보 -> 테마)
테마명이 나오며, 테마 링크를 클릭하면 해당 종목들이 나온다. (모든 종목을 한번에 보고싶었다)
+ 테마 검색도 없다.
그래서 BeautifulSoup 라이브러리를 통해 만들었다.
Soup를 통한 select를 할 때, Copy - Copy Selector를 통해서 태그를 가져오면 된다.
<소스코드>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
|
import sys
sys.path.append('C:\\Users\\user\\Anaconda3\\libs')
import requests
from io import BytesIO
import pandas as pd
import seaborn as sns
from tqdm import tqdm
from bs4 import BeautifulSoup
import datetime
import re
from postLib import PostgresDataClass
# from html_table_parser import parser_functions as parser
#%%
end = datetime.datetime.now()
start = end - datetime.timedelta(days=10)
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.76 Safari/537.36', "Upgrade-Insecure-Requests": "1","DNT": "1","Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8","Accept-Language": "en-US,en;q=0.5","Accept-Encoding": "gzip, deflate"}
pd.set_option('display.float_format', None)
df = pd.DataFrame()
#%%
for pagenum in range(1,8):
url = "https://finance.naver.com/sise/theme.nhn?field=name&ordering=asc&page={pagenum}".format(pagenum=pagenum)
resp = requests.get(url, headers = headers)
soup = BeautifulSoup(resp.content, "html.parser")
thema_num = 0
while thema_num < 50:
try :
thema_num += 1
board_date = soup.select("#contentarea_left > table.type_1.theme > tr:nth-child("+str(thema_num)+") > td.col_type1 > a")[0]
linkUrl = 'https://finance.naver.com' + board_date['href']
linkResp = requests.get(linkUrl, headers = headers)
linkSoup = BeautifulSoup(linkResp.content, "html.parser")
thema = board_date.text
except Exception as e:
continue
link_num = 0
while link_num < 100 :
try :
link_num += 1
link_board_date = linkSoup.select("#contentarea > div:nth-child(5) > table > tbody > tr:nth-child("+str(link_num)+") > td.name > div > a")[0].text
print(thema, link_board_date)
df = df.append({'thema' : thema, 'stock' : link_board_date}, ignore_index =True)
except :
continue
df1 = df.groupby(['stock'])['thema'].apply(lambda x: ','.join(x)).reset_index()
df.to_excel('C:\\Users\\user\\thema.xlsx')
df1.to_excel('C:\\Users\\user\\thema2.xlsx')
tuples = [tuple(x) for x in df.values.tolist()]
post = PostgresDataClass('localhost','stock','postgres','postgres')
post.insert_list(tuples, 'stock.thema_stock')
|
cs |
<데이터> 예제 (네이버)
반응형
'투자 > 개발' 카테고리의 다른 글
위불과 같은 RSI 계산하기 (엑셀, 파이썬) (0) | 2021.09.25 |
---|---|
Google Sheets를 이용한 자동 메일 (0) | 2021.09.06 |