URL 주소의 패턴을 이용해서 여러 페이지의 정보 수집해보기
# 정적 크롤링을 위한 라이브러리 import
import requests
import bs4
# URL 주소 입력 및 HTML 받아오기
# URL에 한글이 포함될 경우 자동으로 인코딩 되므로 지우고 한글로 써주면됨
URL = "https://tv.naver.com/r"
# get 함수를 이용해서 웹 페이지의 내용 요청하기
raw = requests.get(URL)
# 문자열 타입인 raw.text를 실제 HTML 코드로 변환해주기
html = bs4.BeautifulSoup(raw.text, 'html.parser')
# 데이터를 감싸는 큰 틀 추출하기
box = html.find('div', { 'class' : 'top100' })
# 각 영상에 대한 데이터를 모두 받아오기
contents = box.find_all('dl', { 'class' : 'cds_info'})
# video 갯수 구하기 ( top 100이므로 100개 나오는게 맞음 )
#print(len(video))
#반복문을 사용해서 각 영상의 이름과 제목 추출하기
for content in contents :
name = content.find('dd',{ "class" : "chn" })
title = content.find('dt',{ "class" : "title" })
print( name.text, title.text)

* top100은 실시간 데이터라 실시간으로 순위가 변경됨
크롤링 기능 추가하기
import requests
import bs4
# 반복문과 input 함수를 사용해서 원하는 데이터 찾기
while True :
keyword = input("원하는 데이터 키워드를 입력해주세요. (0을 입력하면 종료)")
if keyword == "0" :
break
URL = "https://tv.naver.com/" + keyword
raw = requests.get(URL)
html = bs4.BeautifulSoup(raw.text, 'html.parser')
box = html.find('div', { 'class' : 'top100' })
contents = box.find_all('dl', { 'class' : 'cds_info'})
for content in contents :
name = content.find('dd',{ "class" : "chn" })
title = content.find('dt',{ "class" : "title" })
print( name.text, title.text)
r을 입력하면 실시간 네이버tv의 TOP100을 확인할 수 있음
최종 코드
# 정적 크롤링을 위한 라이브러리 import
import requests
from bs4 import BeautifulSoup
keyword = input("원하는 데이터 키워드를 입력해주세요. (0을 입력하면 종료) ")
# URL 주소 입력 및 HTML 받아오기
# * URL에 한글이 포함될 경우 자동으로 인코딩 되므로 지우고 한글로 써주면된다.
# keyword를 이용해서 검색하고자하는 데이터 페이지로 이동해 데이터 추출이 가능함
URL = "https://tv.naver.com/" + keyword
# get 함수를 이용해서 웹 페이지의 내용 요청하기
raw = requests.get(URL)
# 문자열 타입인 raw.text를 실제 HTML 코드로 변환해주기
# from bs4 import BeautifulSoup 로 지정해줘서 bs4 안써줘도 됨
html = BeautifulSoup(raw.text, 'html.parser')
# 데이터를 감싸는 큰 틀 추출하기
box = html.find('div', { 'class' : 'top100' })
# 각 영상에 대한 데이터를 모두 받아오기
contents = box.find_all('dl', { 'class' : 'cds_info'})
print("\n[ 네이버 TV 실시간 TOP10 ]\n")
rank = 0
# 반복문을 사용해서 각 영상의 이름과 제목 추출하기
# 이름과 제목을 추출할 경우 문자열 타입으로 추출해야함
# strip 함수를 사용해서 양쪽 공백 제거
# lstrip : 왼쪽 공백 제거, rstrip : 오른쪽 공백 제거, strip : 양쪽 공백 제거
for content in contents[:10] :
rank += 1
name = content.find('dd',{ "class" : "chn" })
title = content.find('dt',{ "class" : "title" })
print( rank, ":", name.text.strip())
print(title.text.strip() + "\n")

[ 9일차 문제 ]

import requests
import bs4
# 반복문과 input 함수를 사용해서 원하는 데이터 찾기
my_list = [["G마켓 랭크 순", 7] , ["판매 인기 순" , 8], ["낮은 가격 순" , 1] ,["높은 가격 순", 2], ["상품평 많은 순" , 13], ["신규 상품 순", 3]]
while True :
print(" 1. G마켓 랭크 순\n 2. 판매 인기 순\n", "3. 낮은 가격 순\n", "4. 높은 가격 순\n", "5. 상품평 많은 순\n", "6. 신규 상품 순\n" )
keyword = int(input("원하는 정렬 순서를 입력해주세요. (0을 입력하면 종료) "))
if keyword == 0 :
break
number = my_list[keyword-1][1]
URL = "https://browse.gmarket.co.kr/search?keyword=마스크&s=" + str(number)
raw = requests.get(URL)
html = bs4.BeautifulSoup(raw.text, 'html.parser')
box = html.find('div', {'class' : 'section__module-wrap', 'module-design-id' : '15'})
items = box.find_all('div', {"class" : 'box__item-container'})
print("\n<<<<", my_list[keyword-1][0], ">>>>\n")
for item in items[:4] :
name = item.find('span', {'class' : 'text__item'})
price = item.find('strong', {'class' : 'text__value'})
print( "이름 :", name.text, "\t가격 : ", price.text, "\n")

* 검색을 원하는 키워드를 입력받아서 그 키워드에 해당하는 모든 랭크 순 나열하기
import requests
import bs4
while True :
keyword = input("검색을 원하는 키워드를 입력 (0을 입력하면 종료) : ")
if keyword == "0" :
break
print("< G마켓의 ", keyword, " 상품 정보 >")
my_List = [["7", "G마켓 랭크 순"], ["8", "판매 인기 순"], ["1", "낮은 가격 순"], ["2", "높은 가격 순"], ["13", "상품평 많은 순"], ["1", "신규 상품 순"]]
for page, name in my_List :
URL = "https://browse.gmarket.co.kr/search?keyword=" + keyword + "&s=" + page
raw = requests.get(URL)
html = bs4.BeautifulSoup(raw.text, 'html.parser')
box = html.find('div', {'class' : 'section__module-wrap', 'module-design-id' : '15'})
items = box.find_all('div', {'class' : 'box__item-container'})
print("< ", name, " >\n")
for item in items[:5] :
title = item.find('span', {'class' : 'text__item'})
price = item.find('strong', {'class' : 'text__value'})
print( "이름 :", title.text, "\t가격 :", price.text, "\n")
저작권 출처 : https://cafe.naver.com/codeuniv
코딩 커뮤니티 - 코뮤니티 [파이썬/... : 네이버 카페
코뮤니티 [코딩공부/독학/스터디/대외활동] : python, C언어, java, 자바스크립트, HTML, CSS, 웹/앱개발
cafe.naver.com
'DATA > [ 모각코+ 12월 과정 ] 웹 크롤링' 카테고리의 다른 글
| [ 모각코+ 11일차 ] 동적 크롤링 사용해보기 ② (0) | 2022.01.04 |
|---|---|
| [ 모각코+ 10일차 ] 동적 크롤링 사용해보기 ① (0) | 2022.01.01 |
| [ 모각코+ 8일차 ] 정적 크롤링 사용해보기 ③ (0) | 2021.12.29 |
| [ 모각코+ 7일차 ] 정적 크롤링 사용해보기 ② (0) | 2021.12.28 |
| [ 모각코+ 6일차 ] 정적 크롤링 사용해보기 ① (0) | 2021.12.28 |