※크롤링은 파이썬으로 진행됨
크롤링
- 주로 인터넷 상의 웹 페이지를 수집하여 분류 및 저장 하는 행위
페이지를 받아오는 순서
1. 해당 웹 페이지에 '요청'
2. 요청 후 응답 받음
3. 해당 응답(웹 페이지)에서 원하는 정보를 추출 및 분류 후 저장
1. 해당 웹 페이지에 '요청'
1 2 3 | import requests as req url = 'https://www.naver.com' req.get(url) | cs |
해당 웹 페이지에 '요청'은 'requests' 라이브러리의 get( 'url 전체 주소') 함수를 이용
Response[200] 일 경우 성공
Response[406] 일 경우 실패를 의미
get 함수로 받아온 응답은 html 문서 형식으로 전달 된다.
naver 의 페이지에 요청 후, naver 페이지를 출력하는 경우
1 2 3 4 | import requests as req url = 'https://www.naver.com' res = req.get(url) print(res.text) | cs |
아래와 같이 태그를 포함한 HTML Document 형식으로 반환된다
해당 반환 값에서 특정 태그에 있는 값을 추출하기 위해서는 별도의 라이브러리를 이용한다
1 | from bs4 import BeautifulSoup as bs | cs |
BeautifulSoup
- 웹 페이지 정보를 파싱해주는 라이브러리
웹 페이지에서 특정 태그의 값을 가져오는 방법
1. 가져오고 잎은 데이터가 있는 url 요청
2. 가져온 웹페이지 정보 파싱
3. 'select' 를 이용하여 추출, 파싱
예제)
네이버 페이지 특정 글자 가져오기
1 2 3 4 5 6 7 8 9 10 11 12 | import requests as req from bs4 import BeautifulSoup as bs #네이버로 요청후 요청 받은 값을 저장 res = req.get('https://www.naver.com/') #받은 응답 페이지에 대해 파싱 soup = bs(res.text,'lxml') bb = soup.select_one('#NM_set_home_btn') #해당 태그의 텍스트 값 print(bb.text) | cs |
예제2)
데이터 프레임을 활용한 5월 11일 영화 순위 출력
※데이터 프레임은 import pandas as pd 를 사용
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 | import requests as req from bs4 import BeautifulSoup as bs import pandas as pd #해당 페이지에 요청, 요청후 응답값 저장 - 2022-05-11 영화 순위 페이지 url = 'https://movie.naver.com/movie/sdb/rank/rmovie.naver?sel=cur&date=20220511' res = req.get(url) s = bs(res.text, 'lxml') #페이지의 순위별 타이틀, 평점을 대상으로 파싱 movie = s.select('div.tit5>a') score = s.select('td.point') movie_list = [] score_list = [] rank_list = [] #1위(index+1)를 시작으로 데이터 삽입 for i in range(len(movie)): movie_list.append(movie[i].text) score_list.append(score[i].text) rank_list.append(i+1) #데이터 프레임 생성 movie_rank = pd.DataFrame({'순위':rank_list,'영화':movie_list,'평점':score_list}) #순위를 index로 사용 movie_rank.set_index('순위',inplace = True) # display(movie_rank) | cs |
댓글
댓글 쓰기