프로그래밍/스크래핑
[Python] 주식 정보 자동화
부단
2020. 10. 23. 07:12
728x90
[오늘은 주식 정보를 크롤링해서 가져오겟습니다.]
먼저 아래 코드에서 사용된 replace_stock라는 함수는 크롤링해서 가져온 정보를 사용학기 위한 직접적인 정보로 바꿔주는 역할임을 알려드립니다.
def replace_stock(datas):
datas = datas.replace("td","")
datas = datas.replace("<","")
datas = datas.replace(">","")
datas = datas.replace(" ","")
_,datas = datas.split(",",1)
return data
from bs4 import BeautifulSoup
import requests
stock_name = str(input())
data = []
def replace_stock(datas):
datas = datas.replace("td","")
datas = datas.replace("<","")
datas = datas.replace(">","")
datas = datas.replace(" ","")
_,datas = datas.split(",",1)
return data
try:
data_remove = []
url="https://www.google.com/search?query=" + stock_name +" 주식"
hdr = {'Accept-Language': 'ko_KR,en;q=0.8', 'User-Agent': ('Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.116 Safari/537.36')}
req = requests.get(url, headers=hdr)
html = req.text
soup = BeautifulSoup(html, 'html.parser')
for i in soup.select('div[class=aviV4d]'):
data.append(i.text)
#print(data)
for i in soup.select('div[class=OiIFo]'):
data_remove.append(i.text)
#print(data_remove)
_,remove = data_remove[0].split(" ")
data = str(data).split(" ")
price = data[1].replace(remove,"")
except IndexError as I:
data1 = soup.findAll('td')
data = str(data1).split("/td")
price = replace_stock(data[1])
data[3] = replace_stock(data[4])
updown = replace_stock(data[7])
if updown[0] == '-':
data[3] = '-' + data[3]
else:
data[3] = '+' + data[3]
print("{} 주식 관련 정보".format(stock_name))
print("현재 가격 : {} \n가격변동 : {}".format(price, data[3]))
작동 방식은 원하는 주식 이름을 입력받아 그 입력받은 값에 "주식"을 붙여 구글에 검색하는 원리입니다. 이런 방식으로 크롤링을 진행하면 처음 입력이 잘못되어도 구글에서 자동적으로 검색어를 보정해줍니다.(ex : XX점자(잘못입력) -> XX전자(알맞은 값)으로 변환 후 검색)
단점은 특정 주식에 대한 html구성이 다를 경우에 크롤링이 되지 않을 수 있습니다. (이를 해결하기 위해 excpet문을 추가했지만, 또 다른 케이스가 존재할 경우 크롤링이 안 될 수 있습니다.)
실행값 :
※해당 사이트의 robots.txt를 찾아보면
User-agent: * Disallow: /search
이므로 이 포스팅은 공부 참고용으로만 사용해주시기를 권장합니다! ※