작업 환경 구성
> mkdir webCrawling
> cd webCrawling
> python -m venv myvenv
> myvenv\Scripts\activate
> python -m pip install --upgrade pip
> pip install requests
> pip install BeautifulSoup4
네이버 날씨 미세먼지 가져오기
# 네이버 날씨에서 미세먼지 지수 가져오기
from bs4 import BeautifulSoup as bs
from pprint import pprint
import requests
html = requests.get('https://search.naver.com/search.naver?sm=top_hty&fbm=0&ie=utf8&query=%EB%82%A0%EC%94%A8') #네이버 날씨 웹페이지 가져오기
soup = bs(html.text, 'html.parser') #파싱을 통해 분석하여 html 요소들에 쉽게 접근 가능
data1 = soup.find('div', {'class':'detail_box'}) #매칭되는 처음 1개만 반환
data2 = data1.findAll('dd') #매칭되는 모든 애들 반환-> 0:미세먼지, 1:초미세먼지, 2:오존지수
data3 = data2[0].find('span', {'class':'num'}).text #미세먼지 지수만 뽑아서 텍스트로 반환
data4 = data2[1].find('span', {'class':'num'}).text #초미세먼지 지수만 뽑아서 텍스트로 반환
pprint(data3) #미세먼지
pprint(data4) #초미세먼지
네이버 웹툰 제목 가져오기
월요일 웹툰 제목을 가져와보자
from bs4 import BeautifulSoup as bs
from pprint import pprint
import requests
html = requests.get('https://comic.naver.com/webtoon/weekday.nhn')
soup = bs(html.text, 'html.parser')
html.close()
data1 = soup.find('div', {'class':'col_inner'})
data2 = data1.findAll('a', {'class':'title'})
for i in data2:
pprint(i.text)
모든 요일 웹툰 제목을 가져와보자
from bs4 import BeautifulSoup as bs
from pprint import pprint
import requests
# 웹 페이지 열고 소스코드 가져오기
html = requests.get('https://comic.naver.com/webtoon/weekday.nhn')
soup = bs(html.text, 'html.parser')
html.close()
# 요일별 웹툰 영역 추출
data1_list = soup.findAll('div', {'class':'col_inner'})
week_title_list = [] # 전체 웹툰 리스트
for data1 in data1_list:
data2 = data1.findAll('a', {'class':'title'}) # 요일별 제목 리스트 추출
title_list = [t.text for t in data2] # 요일별 제목 리스트 텍스트만 추출
#week_title_list.extend(title_list) # 단순히 값을 붙이는 경우
week_title_list.append(title_list) # 요일별로 나눠서 2차원 리스트를 만드는 경우
pprint(week_title_list)
사실...
div class="col_inner"을 거치지 않더라도
a class="title"부터 찾아서 제목 추출 가능. 간단하게!
네이버 웹툰 썸네일 가져오기
from bs4 import BeautifulSoup as bs
from pprint import pprint
import requests, re, os, errno
from urllib.request import urlretrieve # 이미지 또는 동영상 링크 다운로드
try:
if not (os.path.isdir('image')): # image 디렉토리가 있는지 확인
os.makedirs(os.path.join('image'))
except OSError as e:
if e.errno != errno.EEXIST:
print("폴더 생성 실패!")
exit()
# 웹 페이지 열고 소스코드 가져오기
html = requests.get('https://comic.naver.com/webtoon/weekday.nhn')
soup = bs(html.text, 'html.parser')
html.close()
# 요일별 웹툰 영역 추출
data1_list = soup.findAll('div', {'class':'col_inner'})
li_list = []
for data1 in data1_list:
li_list.extend(data1.findAll('li'))
for li in li_list:
img = li.find('img') # img 태그 추출
title = img['title'] # 속성값 추출
img_src = img['src']
#print(title, img_src)
title = re.sub('[^0-9a-zA-Zㄱ-힗]', '', title) # 파일명에 특수기호가 들어있으면 삭제한다
urlretrieve(img_src, './image/'+title+'.jpg') # 파일경로+파일명+확장자
참고
파이썬 레시피 - 웹 활용 입문편
'Python > 실습' 카테고리의 다른 글
[Django 유튜브 동영상 업로드 서비스] 나의 첫번째 DjangoTube 프로젝트(계속 업데이트 중...2020/04/28) (0) | 2020.04.14 |
---|---|
[REST API: requests] 네이버 개발자 등록 / Naver Papago API / 번역 API (0) | 2020.03.30 |
[django 연습] 나의 첫 번째 Django 프로젝트 / Django Girls(장고 걸스) Tutorial (0) | 2020.03.21 |
[django 연습] Diary / 일기장 / CRUD 구현 (0) | 2020.03.04 |
[파이썬으로 영화 예매 오픈 알리미 만들기] 3. 스케쥴러 (0) | 2020.02.25 |