파이썬 웹 크롤링하기 3 : 여러 페이지의 댓글 긁어오기 + 파일에 저장하기 :: A4용지

저번 시간에는 하나의 웹 페이지의 댓글들을 크롤링하여 출력해보았습니다.


이번 시간에는 포문으로 웹 페이지를 탐색하는 과정을 자동화 함으로써 여러 페이지의 댓글들을 크롤링 해보도록 하겠습니다.


우선 조사해보도록 하겠습니다.


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() 해줍니다.


어디 한번 파일을 열어볼까요?


첨부하도록 하겠습니다ㅎㅎ

data1.txt


+ Recent posts