728x90
페이지 다운을 이용해서 유튜브에서 영상의 제목, 조회수 크롤링
from selenium import webdriver as wb
from selenium.webdriver.common.keys import Keys
from bs4 import BeautifulSoup as bs
import pandas as pd
import time
# 1. 크롬 드라이버를 실행해서 유튜브 화면 실행
driver = wb.Chrome()
url="https://www.youtube.com/results?search_query=%EC%82%AC%EB%82%98%EA%B3%A0"
driver.get(url)
반응형
페이지 다운
- Keys.PAGE_DOWN
- 컴퓨터가 페이지 스크롤을 내릴수있게 해준다.
아래는 유튜브의 영상 제목과 영상 길이를 크롤링 해봤다.
# 컴퓨터가 페이지 다운하는 기능
body = driver.find_element_by_tag_name("body")
# 50번 페이지 다운
for i in range(1,50):
body.send_keys(Keys.PAGE_DOWN)
time.sleep(0.5)
# 2. 영상의 제목만 크롤링
soup = bs(driver.page_source, 'lxml')
title = soup.select("a#video-title")
titleList=[]
for i in range(len(title)):
titleList.append(title[i].text.strip())
for i in titleList:
print(i)
# 3. 영상의 길이를 확인, 순수한 텍스트까지 출력
lens = soup.select("div#overlays > ytd-thumbnail-overlay-time-status-renderer > span.style-scope")
lensList=[]
for i in range(len(lens)):
lensList.append(lens[i].text.strip())
for i in lensList:
print(i)
이제 영상의 조회수를 크롤링해보자.
여기서는 동일이름의 자식을 크롤링할때 어떻게 구분하는지 배울꺼다.
# 4. 영상의 조회수
soup.select("div#metadata span")
위에서는 자식 태그가 똑같아서 조회수 말고 날짜도 나온다
우리는 자식 태그중 첫번째 자식만 가져올거다. -> nth-child(1) 사용
# 조회수 크롤링
soup.select("div#metadata span:nth-child(1)")
# 날짜 크롤링
soup.select("#metadata-line > span:nth-child(2)")
이미지 크롤링
네이버사이트에서 고양이 사진을 크롤링해서 저장하는 걸 배워볼거다.
먼저 이미지를 저장해줄 폴더를 만들어 주자.
import os # 파일 시스템을 위한 라이브러리 ex) 파일, 폴더를 생성 삭제
from urllib.request import urlretrieve # 이미지의 경로를 파일로 저장
# 사진을 저장해줄 폴더를 만들어 주자
# 폴더생성
# 폴더의 존재유무 파악 (같은이름의 폴더는 만들수 없으므로)
# os : 파일의 경로를 찾아줌
# 만약 C:/Users/SM2119/Desktop/에 이미지라는 폴더가 없다면 폴더를 만들어라
if not os.path.isdir("C:/Users/SM2119/Desktop/이미지") :
print('폴더 생성 완료')
os.mkdir("C:/Users/SM2119/Desktop/이미지")
else:
print("이미 동일한 이름의 폴더가 있습니다")
이미지는 텍스트랑 다르게 가져오려면 src속성값을 가져와야한다.
driver = wb.Chrome()
url = "https://search.naver.com/search.naver?sm=tab_hty.top&where=image&query=%EA%B3%A0%EC%96%91%EC%9D%B4&oquery=%EA%B0%95%EC%95%84%EC%A7%80&tqi=h7EdVlp0J1sssg6TcBhssssst%2BK-502111"
driver.get(url)
soup = bs(driver.page_source, 'lxml')
img = soup.select("img._listImage")
# 안에있는 속성값만 접근하고 싶으면 대괄호[]를 이용하면 된다.
img[0]["src"]
src속성값을 가져와서 리스트에 저장
imgSrc = []
for i in img:
imgSrc.append(i["src"])
len(imgSrc)
이제 저장한 경로를 이용해서 아까 만들어놓은 이미지 폴더에 이미지를 저장하자.
urlretrieve :
- URL로 표시된 네트워크 객체(URL 주소의 문서)를 로컬 파일로 저장
- 즉, 직접 다운로드가 가능하다
from tqdm import tqdm_notebook as tq
# urlretrieve : URL로 표시된 네트워크 객체(URL 주소의 문서)를 로컬 파일로 저장, 즉 직접 다운로드가 가능하다
# 파일의 이름 생성
fileNo = 0
for i in tq(range(len(imgSrc))):
urlretrieve(imgSrc[i], "C:/Users/SM2119/Desktop/이미지/"+str(fileNo)+".jpg")
fileNo += 1
time.sleep(1)
728x90
'파이썬 > 웹 크롤링' 카테고리의 다른 글
[웹 크롤링] Gmarket 100 가져오기로 창없는 크롤링하기 (0) | 2021.06.07 |
---|---|
[웹크롤링] Selenium 모듈과 tqdm라이브러리 (0) | 2021.06.04 |
[웹 크롤링]Requests 와 BeautifulSoup 라이브러리로 페이지 정보 가져오기 [스마트인재개발원] (0) | 2021.06.01 |