- Today
- Total
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- python 중간고사
- 코딩문제
- gdrive
- 알고리즘
- 파이썬 자료구조
- 자료구조 강의
- 면접 파이썬
- 크롤링
- 코딩시험
- 파이썬3
- 셀레니움
- 자료구조
- 파이썬 입문
- selenium
- 대학시험
- Crawling
- 프로그래밍
- 채용문제
- 알고리즘 강좌
- c언어
- python data structure
- 중간시험
- 알고리즘 강의
- 파이썬
- 파이썬 알고리즘
- 쉬운 파이썬
- 파이썬 강좌
- 파이썬활용
- 기말시험
- 파이썬 강의
반원 블로그
[파이썬 레시피 - 웹 활용 입문편] 01. 웹 크롤링 - C. 네이버 웹툰 제목 가져오기 본문
[파이썬 레시피 - 웹 활용 입문편] 01. 웹 크롤링 - C. 네이버 웹툰 제목 가져오기
반원_SemiCircle 2019. 6. 1. 14:11월요 웹툰 제목 추출
실습 주소는 여기입니다. https://comic.naver.com/webtoon/weekday.nhn
먼저 월요일 웹툰의 제목만 추출을 해봅시다.
월요 웹툰 영역
월요 웹툰 영역을 소개하는 곳은 div 태그에 class "col_inner" 속성과 값을 가지고 있습니다.
여기까지 코드를 작성해봅시다.
from bs4 import BeautifulSoup
from pprint import pprint
import requests
#웹 페이지를 열고 소스코드를 읽어오는 작업
html = requests.get("http://comic.naver.com/webtoon/weekday.nhn")
soup = BeautifulSoup(html.text, 'html.parser')
html.close()
#월요웹툰영역 추출하기
data1=soup.find('div',{'class':'col_inner'})
pprint(data1)
제목 영역 코드 추출하기
굳이 개발자도구를 사용안하고 출력결과를 봐도 제목은 이런 식으로 들어있는게 확인됩니다.
<a class="title" href="/webtoon/list.nhn?titleId=716857&weekday=mon" onclick="nclk_v2(event,'thm*m.tit','','23')" title="웹툰제목">
웹툰제목
</a>
여기서 findAll을 이용하여 a태그의 class="title"를 검사하면 제목 텍스트를 추출하는 준비가 됩니다.
from bs4 import BeautifulSoup
from pprint import pprint
import requests
#웹 페이지를 열고 소스코드를 읽어오는 작업
html = requests.get("http://comic.naver.com/webtoon/weekday.nhn")
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)
for를 이용한 텍스트 추출
먼저 기본적인 for문으로 코드를 추출하는 예제입니다.
from bs4 import BeautifulSoup
from pprint import pprint
import requests
#웹 페이지를 열고 소스코드를 읽어오는 작업
html = requests.get("http://comic.naver.com/webtoon/weekday.nhn")
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_list = []
for t in data2:
title_list.append(t.text)
pprint(title_list)
이는 리스트에서의 for문 사용법으로 다음처럼 변경할 수 있습니다.
from bs4 import BeautifulSoup
from pprint import pprint
import requests
#웹 페이지를 열고 소스코드를 읽어오는 작업
html = requests.get("http://comic.naver.com/webtoon/weekday.nhn")
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)
#텍스트만 추출 1
# title_list = []
# for t in data2:
# title_list.append(t.text)
#
# pprint(title_list)
#텍스트만 추출 2
title_list = [t.text for t in data2]
pprint(title_list)
모든 요일 웹툰 제목 가져오기
현재 작업은 이렇습니다.
[월요웹툰영역find] - [해당영역 제목 findAll] - [for로 text 추출]
이제 [월요웹툰영역find] 부분을 [요일별 웹툰영역 findAll] 로 변경시킬 겁니다. 일주일이니 7개가 되겠죠.
즉 뒤에 따라오는 [해당영역 제목 findAll] - [for로 text 추출] 부분도 각 7번씩 수행되어야 합니다.
요일별 영역 가져오기
위에서 다룬 코드와 비교하시면서 따라오시길 바랍니다. 기존 find부분을 findAll로 변경합니다.
그리고 변수명은 data1_list로 변경하겠습니다.(아래서 이렇게 한 이유에 대해 나옵니다.)
from bs4 import BeautifulSoup
from pprint import pprint
import requests
#웹 페이지를 열고 소스코드를 읽어오는 작업
html = requests.get("http://comic.naver.com/webtoon/weekday.nhn")
soup = BeautifulSoup(html.text, 'html.parser')
html.close()
#요일별 웹툰영역 추출하기
data1_list=soup.findAll('div',{'class':'col_inner'})
pprint(data1_list)
이하 코드 반복시키기
이제 [해당영역 제목 findAll] - [for로 text 추출] 을 for문으로 작성합니다. data1_list에서 하나씩 꺼내면 각각 [ '월요웹툰영역', '화요웹툰영역' , .... , '일요웹툰영역' ] 입니다. 하나씩 꺼내온 것을 data1이라 지정하여 이하 코드가 반복되도록 작성합니다.
from bs4 import BeautifulSoup
from pprint import pprint
import requests
#웹 페이지를 열고 소스코드를 읽어오는 작업
html = requests.get("http://comic.naver.com/webtoon/weekday.nhn")
soup = BeautifulSoup(html.text, 'html.parser')
html.close()
#요일별 웹툰영역 추출하기
data1_list=soup.findAll('div',{'class':'col_inner'})
# pprint(data1_list)
for data1 in data1_list:
#제목 포함영역 추출하기
data2=data1.findAll('a',{'class':'title'})
# pprint(data2)
#텍스트만 추출 2
title_list = [t.text for t in data2]
pprint(title_list)
하나의 리스트로 묶기
현재 title_list는 1회성으로 사용되고 있습니다. 요일별 title_list가 생성될 때마다 특정 리스트에 저장하도록 작성해봅시다.
from bs4 import BeautifulSoup
from pprint import pprint
import requests
#웹 페이지를 열고 소스코드를 읽어오는 작업
html = requests.get("http://comic.naver.com/webtoon/weekday.nhn")
soup = BeautifulSoup(html.text, 'html.parser')
html.close()
#요일별 웹툰영역 추출하기
data1_list=soup.findAll('div',{'class':'col_inner'})
# pprint(data1_list)
#전체 웹툰 리스트
week_title_list = []
for data1 in data1_list:
#제목 포함영역 추출하기
data2=data1.findAll('a',{'class':'title'})
# pprint(data2)
#텍스트만 추출 2
title_list = [t.text for t in data2]
# pprint(title_list)
week_title_list.extend(title_list) #단순하게 값을 추가해 1차원으로 만들려면 extend
# week_title_list.append(title_list) #요일별로 나눠 2차원 리스트를 만들려면 append
pprint(week_title_list)
사실은...
단순하게 웹툰 제목을 가져오는 코드라면 이렇게 단순하게 만들 수 있습니다.
from bs4 import BeautifulSoup
from pprint import pprint
import requests
#웹 페이지를 열고 소스코드를 읽어오는 작업
html = requests.get("http://comic.naver.com/webtoon/weekday.nhn")
soup = BeautifulSoup(html.text, 'html.parser')
html.close()
#모든 웹툰 제목 영역 추출
data1=soup.findAll('a',{'class':'title'})
week_title_list = [ t.text for t in data1]
pprint(week_title_list)
그러나 경우에 따라서 영역을 나눠서 접근해야만 원하는 데이터까지 도달할 수 있으므로, 지금까지 했던 방법이 굉장히 중요합니다.
'2018~ > 파이선 레시피 웹 활용 입문편' 카테고리의 다른 글
[파이썬 레시피 - 웹 활용 입문편] 02. 웹 자동화 - C. 1 to 50 봇 (0) | 2019.06.08 |
---|---|
[파이썬 레시피 - 웹 활용 입문편] 02. 웹 자동화 - B. 유튜브 키워드 검색 (0) | 2019.06.08 |
[파이썬 레시피 - 웹 활용 입문편] 02. 웹 자동화 - A. Selenium 설치 (0) | 2019.06.08 |
[파이썬 레시피 - 웹 활용 입문편] 01. 웹 크롤링 - D. 네이버 웹툰 썸네일 가져오기 (0) | 2019.06.01 |
[파이썬 레시피 - 웹 활용 입문편] 01. 웹 크롤링 - B. 네이버 날씨 미세먼지 가져오기 (0) | 2019.06.01 |
[파이썬 레시피 - 웹 활용 입문편] 01. 웹 크롤링 - A. BeautifulSoup4, requests 설치 (0) | 2019.06.01 |
[파이썬 레시피 - 웹 활용 입문편] 00. B. 동영상 강의 (0) | 2019.05.31 |
[파이썬 레시피 - 웹 활용 입문편] 00.A. 소개 (0) | 2019.05.31 |