Hun's Blog

[Python] 웹 크롤링 3 - 네이버 웹툰 제목 가져오기 본문

Language/Python

[Python] 웹 크롤링 3 - 네이버 웹툰 제목 가져오기

jhk-im 2020. 4. 5. 23:55

참고

파이썬 레시피 - 웹 활용 입문편을 공부하면서 정리한 내용

https://wikidocs.net/36472

 

위키독스

온라인 책을 제작 공유하는 플랫폼 서비스

wikidocs.net

*BeautifulSoup + requests 를 활용해 네이버 웹툰의 제목을 가져와보자. 

 

1. 스크립트 작성 

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
31
32
33
34
35
36
from bs4 import BeautifulSoup
from pprint import pprint
import requests
 
soup = BeautifulSoup(html.text, 'html.parser')
html.close()
 
data1 = soup.find('div',{'class':'col_inner'})
#pprint(data1)
 
data2 = data1.findAll('a',{'class':'title'})
#pprint(data2)
 
title_list1 = []
for t in data2:
#pprint(title_list1)
 
 
title_list2 = [t.text for t in data2]
#pprint(title_list2)
 
data_list = soup.findAll('div',{'class':'col_inner'})
 
week_title_list = []
 
for divisionData1 in data_list:
    divisionData2 = divisionData1.findAll('a',{'class':'title'})
    #pprint(divisionData2)
    title_list3 = [t.text for t in divisionData2]
    #pprint(title_list3)
 
pprint(week_title_list)
 
 

--

1-1 requests.get(url) , BeautifulSoup(html.text, 'html.parser'), close()

-> requests.get() 메소드와 , BeautifulSoup() 변수를 선언하여 네이버 웹툰 페이지 소스를 받아온다. 

-> requests.close() 

   -> 현재 예제에서는 한번 소스를 받고 더이상 사용되지 않기 때문에 close() 메소드로 connection을 종료한다. 

 

--

1-2 data1 = soup.find('div',{'class':'col_inner'} 

-> find() 메소드에 'div',{'class':'col_inner'} 입력

   -> 클래스명이 col_inner 인 div 태그를 찾아 반환하여 data1변수에 담는다. 

find() -> 'div',{'class':'col_inner'} find -> 출력 

--

1-3 data2 = data1.findAll('a',{'class':'title'})

-> findAll() 메소드에 'a',{'class':'title'} 입력

   -> 클래스명이 title 인 a 태그를 모두 가져와 반환하여 data2 메소드에 담는다.

findAll() -> 'a',{'class':'title'} -> 모두출력

--

data2 는 findAll 로 리스트를 받아와 담겨져있으므로 배열로 각각의 태그a가 저장되어있는 것을 확인할 수 있다. 

 

1-4

title_list1 = []  

for t in data2:

   title_list1.append(t.text)

-> data2 를 for문으로 돌면서 각각의 태그 a를 .text 로 태그 내부의 text를 뽑아낸다. 

-> 위에서 생성한 title_list1 배열에 순차적으로 추가한다. 

title_list1 출력 

--

네이버 월요일 웹툰

현재까지는 월요일의 웹툰 제목을 가져오는데 성공하였다. 

[div.col_inner 를 검사]-> [웹툰표시영역 find] -> [해당 영역의 모든 title findAll] -> [for문 제목 추출] 

 

예제의 목표는 모든 요일의 웹툰 제목을 가져와서 요일별로 리스트에 담는것이다. 

div.col_inner 를 검사하는 흐름을 6번 더 반복해서 진행하고 요일별로 구분해보도록 하자.

 

--

 

1-5 data_list = soup.findAll('div',{'class':'col_inner'}

-> findAll() 메소드를 사용해서 col_inner 클래스인 div 태그를 모두 가져와 data_list 변수에 담는다. 

 

1-6 

week_title_list = []

for divisionData1 in data_list:
    divisionData2 = divisionData1.findAll('a',{'class':'title'})
    title_list3 = [t.text for t in divisionData2]
    week_title_list.appen(title_list3)

-> data_list를 for 문으로 돌면서 각각의 div태그를 findAll() 메소드를 사용하여 title클래스인 a 태그를 모두 가져와 divisionData2 에 담는다. 

-> divisionData2를 다시 for문으로 돌면서 각각의 a태그의 text를 가져와 title_list3에 담는다. 

-> week_title_list 에 title_list3 를 append 메소드로 추가한다. 

    -> append 로 추가하면 list 별로 구분되어서 저장된다. 

 

요일별로 구분된 웹툰 제목 리스트