Sparta Coding Club/웹개발 종합반 [항해 99]

웹개발 종합반, 왕초보 시작반 3주차. Python 파이썬 기초 냠냠

김쨔뿌 2021. 8. 8. 12:50

어려운 듯.. 쉬운 듯.. 아리송한 파이썬.

처음에는 '뭐야 자바스크립트랑 비슷하네?' 생각이 들었지만 웹크롤링을 건들면서 '아니 이거 완전 다른 거잖아?' 싶어 졌다.

 

Python

누구나 한 번쯤 들어본 이름이다.

코딩해본 사람들에게는 '아 파이썬? 그거 쉬운 거야~'라고 하지만... 애매하다. 

쉬운 건 아니지만, 그렇게 어렵진 않다. 비전공자에 고졸이 뇌에 힘주면 할 수 있을 정도?

 

자바스크립트 기초를 할 수 있다면 파이썬의 언어 자체는 낯설지 않다. 

단어만 조금 다르고 의미는 같거나 비슷한 정도로만 다르다.

자바스크립트에서 let const var로 변수를 선언했다면 파이썬에서는 그냥 선언하면 된다!

그냥 a = 0이라고 처음부터 적어버리면 된다.

함수는 function이 아닌 def를 사용한다. 방식도 비슷하다. def 함수명(); 이렇게 사용하면 된다. 

 

약간 헷갈렸던 건 탭으로 내용물을 구분하는 건데 이건 다른 코딩을 할 때 정리하는 걸 좋아하는 사람이라면 쉽게 익숙해진다.

보통 html css js는 대괄호나 중괄호, 소괄호를 이용해 그것의 내용물의 앞과 끝을 정해주지만

파이썬은 탭으로 정해준다.

 

 

for(let i = 0; i <rows.length; i++){
                        let gu_name = rows[i]['MSRSTE_NM']
                        let gu_air = rows[i]['IDEX_NM']
                        if(gu_air == '좋음'){
                            $('#names-q1').append(`<li style="color:green">${gu_name} : ${gu_air}</li>`);
                        }else{
                             $('#names-q1').append(`<li style="color:orange">${gu_name} : ${gu_air}</li>`);
                        }
}

 

위는 자바스크립트에서의 for문이다. 빨간색으로 표시된 괄호로 for문의 내용에 틀을 만들어준다.

 

for listIn in list:
    spanEl = listIn.select_one('td.number').find_all('span')
    for span in spanEl:
    span.extract()

    rank = listIn.select_one('td.number').text

    title = listIn.select_one('td.info > a.title.ellipsis').text
    artist = listIn.select_one('td.info > a.artist.ellipsis').text

    print(rank.strip(),title.strip(),artist.strip())

 

위는 파이썬에서의 for문이다. 티스토리 인용에 탭키가 먹히지 않아 스페이스바를 네 번씩 눌렀지만..

어쨌건, 저런 형식으로 구분하는 방식이 다르다. 

 

조건문이나 반복문의 사용 방식도 자바스크립트와 꽤 비슷하다!

if 조건문:
    조건문이 참일 경우 실행할 내용
else:
    조건문이 거짓일 경우 실행할 내용
list = ['a','b','c']

for listIn in list:
    리스트의 내용물로 반복할 내용

반복문은 리스트와 함께 쓰인다. 그 외에 크게 다른 건 없다.

 

 

 

파이썬 패키지 사용이나 웹 크롤링하는 법도 배웠다. 

 

패키지는 requestbeautifulsoup4를 설치했다.

설치방법은 간단하다!

윈도우 기준으로 좌측 상단 file을 클릭, settings를 클릭하면 창 하나가 뜬다. 

파이선 세팅창

이미지에 표시한 위치에 있는  +버튼을 클릭하면 새로운 창 하나가 뜬다.

검색바에 원하는 패키지 명을 치고, 선택하고, 좌측 하단 install Package를 클릭하고.. 

설치가 다 되면 x버튼을 누르고 나가서 ok를 누르면 끝!

 

request를 통하여 API를 이용해 특정한 값들을 불러올 수 있다. 

미세먼지 API로 특정지역의 미세먼지 농도를 불러오거나 특정 미세먼지 농도를 가진 지역들을 불러오는 등을 할 수 있다.

 

bs4는 특정 사이트의 태그를 가져와 원하는 값을 추출해낼 수 있다. 이렇게 쓰면 간단하지만, 막상 해보면 약간 헷갈리기도 하고 원하지 않는 값을 가져오는 등의 일이 발생한다.

 

특히 이번 숙제에서 상위 태그의 텍스트만 가져오고 하위 태그는 가져오지 않아야 하는 상황이 있는데,

인터넷을 검색해보니 extract() 태그를 사용하면 된다고 해서 사용했다..

 

list = soup.select('#body-content > div.newest-list > div > table > tbody > tr')

for listIn in list:
    spanEl = listIn.select_one('td.number').find_all('span')
        for span in spanEl: span.extract()
    rank = listIn.select_one('td.number').text
    title = listIn.select_one('td.info > a.title.ellipsis').text
    artist = listIn.select_one('td.info > a.artist.ellipsis').text
    print(rank.strip(),title.strip(),artist.strip())

일단 출력은 원하는 대로 나왔다. 그런데..! 

 

숙제의 해답..

 

....?

ㅋㅋ..ㅋㅋㅋㅋ.. 더 쉬운 방법이 있었다.

text [0:2]는 2번째까지의 텍스트를 가져온다는 거고.. 가져와야 하는 순위는 50위까지였으니..!

약간 허튼짓 한 기분이 들지만 텍스트 길이가 일정하지 않을 때는 extract를 쓰는 게 좋을 것 같다.

 

이렇게 3주 차도 완강..

조금 쉬었다가 4주 차도 달리러 가야지.