from bs4 import BeautifulSoup
f = open("file_path", encoding = 'UTF-8')
text = BeautifulSoup(f.read(), 'html-parser')
h1 = text.find('h1')
h2 = text.find('h2')
#ul > li 에 해당하는 모든 li를 출력한다.
ul = text.find('ul')
lis = ul.find_all('li')
for l in lis:
print(l.text)
lis = text.find_all('li')
for l in lis:
print(l.text)
1) 주가
div_today = bs.find("div", {"class" : "today"})
em = div_today.find("em")
today_price = em.find("span", {"class":"blind"}).text
2) 회사 이름
h_company = bs.find("div", {"class":"h_company"})
name = h_company.find("a").text
3) 회사 코드
div_description = h_company.find("div", {"class":"description"})
code = div_description.find("span").text
4) 거래량
table_no_info = bs.find("table", {"class":"no_info"})
tds = table_no_info.find("tr").find_all("td")
volume = tds[2].find("span", {"class":"blind"}).text
5) 함수화
def crawl(code):
url = f"https://finance.naver.com/item/main.naver?code={code}"
res = requests.get(url)
bs = BeautifulSoup(res.text, 'html.parser')
div_today = bs.find("div", {"class" : "today"})
em = div_today.find("em")
today_price = em.find("span", {"class":"blind"}).text
h_company = bs.find("div", {"class":"h_company"})
name = h_company.find("a").text
div_description = h_company.find("div", {"class":"description"})
code = div_description.span
table_no_info = bs.find("table", {"class":"no_info"})
tds = table_no_info.find("tr").find_all("td")
volume = tds[2].find("span", {"class":"blind"}).text
dic = {"price": today_price, "name": name, "code":code, "volume":volume}
return dic
6) 예시
samsung = crawl('005930')
print(samsung)
{'price': '69,700', 'name': '삼성전자', 'code': <span class="code">005930</span>, 'volume': '7,003,670'}
for문을 사용하여 여러 종목에 대한 결과값을 dataframe으로 저장 후 엑셀로 저장한다.
import pandas as pd
import openpyxl
codes = ["005930", "006740", "035720", "454910"]
result = [crawl(code) for code in codes]
df = pd.DataFrame(result)
df.to_excel("prices.xlsx")
위 코드를 실행하면 다음과 같이 데이터프레임 result가 엑셀(맥북의 경우 numbers)에 저장된다.