저번 시간에는 하나의 웹 페이지의 댓글들을 크롤링하여 출력해보았습니다.
이번 시간에는 포문으로 웹 페이지를 탐색하는 과정을 자동화 함으로써 여러 페이지의 댓글들을 크롤링 해보도록 하겠습니다.
우선 조사해보도록 하겠습니다.
http://movie.daum.net/moviedb/grade?movieId=2725
위 url은 다음 영화에서 죽은 시인들의 사회를 검색하여 네티즌 댓글 웹 페이지에 접속한 것입니다.
그리고 앞선 시간에 말했듯이
더욱 구조적인 웹 url을 보려면 두번째 페이지 등등을 확인하면 좋다고 하였습니다.
진짜 url은 그래서 아래와 같습니다.
http://movie.daum.net/moviedb/grade?movieId=2725&type=netizen&page=1
여기서 가장 뒤 숫자만 바뀝니다.
1->2->3.... 이런 식으로요
과연 이 숫자들이 몇까지 갈까요?
현재로서 770개의 댓글이 있고 한 페이지 당 10개의 댓글이 보여집니다.
아하
그럼 총 77페이지 가지 있는거네요
for문을 77번 돌리면 되겠습니다.
자 이제 소스를 짜보도록 하겠습니다.
1 2 | from urllib.request import urlopen from bs4 import BeautifulSoup | cs |
필요한 라이브러리를 받아오구요
1 2 3 4 5 6 7 8 9 10 | base_url = 'http://movie.daum.net/moviedb/grade?movieId=2725&type=netizen&page={}' for n in range (77) : url = base_url.format(n+1) webpage = urlopen(url) source = BeautifulSoup(webpage, 'html5lib') reviews = source.find_all('p', {'class':'desc_review'}) for review in reviews : print(review.get_text().strip()) | cs |
이렇게 코딩하면 됩니다.
이해 하시겠나요?
base_url을 보시면 마지막에 {}이 있는데요, 이 부분만 숫자가 바뀌기에 format() 함수를 사용하기 위해서 만들어 놓았습니다.
format()함수는 {}에다가 원하는 값을 집어 넣어주거든요
그래서 for문이 돌 때마다 새로운 웹 페이지로 접속하게 됩니다.
그리고 그 다음부터는 저번 시간에 했던 것의 반복~
결과값으로 수많은 스트링이 출력될 것입니다.
이것을 이제 텍스트 파일에 저장을 해보도록 하겠습니다.
우선 댓글들을 모두 리스트에 담아야 합니다.
1 2 3 4 | review_list = [] ... ... ... for review in reviews : review_list.append(review.get_text().strip()) | 빈cs |
빈 리스트를 생성하고,
댓글들을 for문을 사용해서 차례로 리스트에 담읍시다.
1 2 3 4 5 6 | file = open('data1.txt', 'w', encoding = 'utf-8') for review in review_list: file.write(review + '\n') file.close() | cs |
open() 함수를 사용해봅시다.
data.txt라는 파일을 생성하고 이를 쓰기모드(w)로 엽니다. encoding = 'utf-8'은 잘 모르겠네요..
그리고 for문을 사용해서 차례차례 write 해줍니다.
그리고 파일을 close() 해줍니다.
어디 한번 파일을 열어볼까요?
첨부하도록 하겠습니다ㅎㅎ