티스토리 뷰

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

이므로 이 포스팅은 공부 참고용으로만 사용해주시기를 권장합니다! ※

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
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
글 보관함