-
[3주차] 스파르타코딩클럽 웹개발 종합반 2카테고리 없음 2022. 10. 20. 16:12
3-5 파이썬 패키지 설치하기.
여기서 상당히 애먹었다.. 알 수없는 오류로 계속 설치가 안되고.. 파이썬 다시 지웠다가 깔았는데도 똑같고..
그래서 아나콘다로 결국 인터프리터 설정은 했는데.. 똑같은 오류는 계속 뜬다.. 파이썬 SDK가 없다는데 검색해도 안나와서 그냥 포기...
빨간 밑줄 오류라고 뜨는데 또 막상 실행은 잘된다. 이게 뭐야.. 3-6 패키지 사용해보기.
어찌저찌 이상하게 설치가 된 것 같지만 Requests 패키지 설치는 했다.
이번에도 api 값을 서버에서 받아와 구 이름이랑 미세먼지 농도를 알려주는 코드를 만들었다.
import requests # requests 라이브러리 설치 필요 r = requests.get('http://spartacodingclub.shop/sparta_api/seoulair') # API 주소 rjson = r.json() rows = rjson['RealtimeCityAir']['row'] for row in rows: gu_name = row['MSRSTE_NM'] gu_mise = row['IDEX_MVL'] if gu_mise < 20: print(gu_name)
확실히 자바스크립트 보다는 훨씬 깔끔해 보이기는 한다 ㅋㅋㅋ
3-7, 3-8
웹스크랩핑(크롤링) 연습 및 퀴즈를 풀었다.
파이썬 패키지인 beautifulsoup4 를 설치했다.
크롤링 기본 세팅
import requests from bs4 import BeautifulSoup # 타겟 URL을 읽어서 HTML를 받아오고, headers = {'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'} data = requests.get('https://movie.naver.com/movie/sdb/rank/rmovie.naver?sel=pnt&date=20210829',headers=headers) # HTML을 BeautifulSoup이라는 라이브러리를 활용해 검색하기 용이한 상태로 만듦 # soup이라는 변수에 "파싱 용이해진 html"이 담긴 상태가 됨 # 이제 코딩을 통해 필요한 부분을 추출하면 된다. soup = BeautifulSoup(data.text, 'html.parser')
select / select_one의 사용법을 익혀봅니다.
# select를 이용해서, tr들을 불러오기 movies = soup.select('#old_content > table > tbody > tr') # movies (tr들) 의 반복문을 돌리기 for movie in movies: # movie 안에 a 가 있으면, a_tag = movie.select_one('td.title > div > a') if a_tag is not None: # a의 text를 찍어본다. print (a_tag.text)
- beautifulsoup 내 select에 미리 정의된 다른 방법
# 선택자를 사용하는 방법 (copy selector) soup.select('태그명') soup.select('.클래스명') soup.select('#아이디명') soup.select('상위태그명 > 하위태그명 > 하위태그명') soup.select('상위태그명.클래스명 > 하위태그명.클래스명') # 태그와 속성값으로 찾는 방법 soup.select('태그명[속성="값"]') # 한 개만 가져오고 싶은 경우 soup.select_one('위와 동일')
나중에 복습 하기 위해서 강의자료에 있는 코드를 복붙했다.
크롬에서 태그를 가져오고 싶은 경우
- 원하는 부분에서 마우스 오른쪽 클릭 → 검사
- 원하는 태그에서 마우스 오른쪽 클릭
- Copy → Copy selector로 선택자를 복사할 수 있음
퀴즈는 코드를 실행했을때 순위 , 영화 제목, 평점이 나오도록 하는 문제였다.
import requests from bs4 import BeautifulSoup headers = {'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'} data = requests.get('https://movie.naver.com/movie/sdb/rank/rmovie.naver?sel=pnt&date=20210829',headers=headers) soup = BeautifulSoup(data.text, 'html.parser') # 코딩 시작 #old_content > table > tbody > tr:nth-child(3) > td.title > div > a #old_content > table > tbody > tr:nth-child(4) > td.title > div > a movies = soup.select('#old_content > table > tbody > tr') for movie in movies: #for문 a= movie.select_one('td.title > div > a') if a is not None: title = a.text #영화 제목만 출력되게 .text 사용 rank = movie.select_one('td:nth-child(1) > img')['alt'] # 순위만 나오도록 alt 사용 star= movie.select_one('td.point').text # 평점만 나오도록 .text 사용 print(rank,title,star) # rank, title, star 출력
나중에 복습하게 되면 다시 한 번 짜봐야겠다. 어후.. 쉽지않다