본문 바로가기
개발일지/selenium, BeautifulSoup, requests

Beautifulsoup에서 html 크롤링 중 문제 발생. (상승, 하락)

by 개발에정착하고싶다 2022. 6. 3.
320x100

1. 해결 전 문제

중간 for 문에서

'updown': item.select_one('.head_info > .blind').text,

이 부분이

'updown': item.select_one('.head_info.point_dn > .blind').text,

으로 되어있었다.

그럼으로 인해서 "하락"만 있을때는 작동이 되었지만, 상승과 하락이 함께 섞여있을때는

에러가 났었다.

 

2. 문제 해설

 

위의 경우에서 .head_info 다음에 나오는 blind에 해당하는게 다행히도 내가 사용을 원하는 것이여서

.head_info.point_dn > .blind

라고 사용함으로 해결할 수 있었지만

만약에 .head_info.point_dn 의 두번째, 내지는 3번째 이후에 나온다면

1) 인덱스 이용하듯이 인덱스 순차적으로 내가 원하는 것을 이용할 수 있거나

2) if 문으로써 point_dn에 해당하는 값은 "하락", point_up에 해당하는 것은 "상승"으로 처리할 수 있는 방법은 없었을까?

왜냐하면 if 문으로 분류하려고 하니깐 에러는 안나던데, 정상 작동이 안되더라. 결과값이

사진"<span class='blind'>상승</span>" 이런식으로 나와서

 

 

 

 

3. 해결 후

# 4개 데이터 수집

from bs4 import BeautifulSoup
import urllib.parse
from urllib.request import urlopen
import requests
import pandas as pd


url = 'https://finance.naver.com/marketindex/'
response = requests.get(url)
response

# requests.get(), requests.post()
response.text
soup = BeautifulSoup(response.text, 'html.parser')

exchangeList = soup.select('#exchangeList li')

exchange_datas = []
baseUrl = 'https://finance.naver.com'

for item in exchangeList:
    data = {
        'title': item.select_one('.h_lst').text,
        'exchange': item.select_one('.value').text,
        'change': item.select_one('.change').text,
        'updown': item.select_one('.head_info > .blind').text,
        'link':baseUrl + item.select_one('a').get('href')
    }
    exchange_datas.append(data)

df =pd.DataFrame(exchange_datas)
df.to_excel('./naverfinanace.xlsx', encoding='utf-8')

 

해결은 학원 커뮤니티에서 어떤 분이 답을 알려주셨다.. ㅠㅠ

300x250