파이썬/크롤링

[python-파이썬] 11 유튜브에서 동영상 정보 크롤링 (crawling) - 2탄

모두의 실험실 2022. 4. 28. 00:10
728x90

안녕하세요. 모두의 파이썬입니다. 1탄에서는 첫 번째 동영상 정보를 크롤링 했습니다. 1탄에서는 'tag'와 속성으로 크롤링 하는 것이 아닌, text의 위치정보로 크롤링을 하였습니다. 2탄에서는 반복적 규칙적인 text 위치 정보를 찾아서 여러 동영상 정보를 크롤링 하겠습니다.

전체 글을 요약하면, 반복적인 text 위치정보를 찾아 여러 동영상 정보 크롤링입니다.

아래 그림에 보이는 10개 동영상 제목과 url을 크롤링 하겠습니다.

ⓒ블랙핑크 유튜브 채널, 출처 Youtube

 

html text 분석하여 규칙적인 구문을 찾겠습니다. 제목 앞에 "title":{"runs":[{"text":" text가 있어서 제목 위치를 찾을 수 있고, 제목이 끝나는 "}]," 이 부분을 split으로 분리시키면 list가 되는데 list의 0번째가 제목이 되고, url은 제목 위치에서부터 url 앞에 "commandMetadata":{"webCommandMetadata":{"url":" text가 있어서 url을 찾을 수 있습니다. url이 끝나는 ","webPageType" 이 부분을 split으로 분리시키면 list 0번째가 url이 됩니다.

코드로 확인하겠습니다

 

In [20]:
## 유튜브에서 동영상 정보 크롤링 (crawling) 
## 유튜브에서 동영상 정보 크롤링 (crawling) 
import requests
from bs4 import BeautifulSoup 
import json

def get_html(url):
    ## 브라우저 호환을 위해서 설정
    headers = {
        'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 '+ \
        '(KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36'
                } 
    ##해당 url에 htlm(정보) 요청에사용 / url은 사용자가 원하는 url
    r = requests.get(url, headers=headers) 
    ## 해당 url의 html을 사용자가 활용하기 쉽게 변환
    html = BeautifulSoup(r.content, 'html.parser')
    ## 결과값 전달
    return html

    
def get_youtube_video_crawling():
    url = 'https://www.youtube.com/c/BLACKPINKOFFICIAL/videos'
    html = get_html(url)
    
    ##제목 시작 위치
    title_point1 = 0
    ##url 시작 위치
    url_point1 = 0
    ## html에서 제목위치 직전 text
    title_param1 = '"title":{"runs":[{"text":"'
    ## html에서 url위치 직전 text
    url_param = '"commandMetadata":{"webCommandMetadata":{"url":"'

    for i in range(0,10):
        ## 제목위치 직전 text 위치
        point1 = str(html)[title_point1:].find(title_param1, 0)        
        ## 제목위치     
        title_point1 = title_point1 + point1 + len(title_param1)
        ## url위치 직전 text 위치 
        point2 = str(html)[title_point1:].find(url_param, 0)
        ## url위치
        url_point1 = title_point1 + point2 + len(url_param)
        
        ## 제목출력
        print(str(html)[title_point1:title_point1+1000].split('"}],"')[0])
        ## url출력
        print('https://www.youtube.com'+ \
              str(html)[url_point1:url_point1+1000].split('","webPageType"')[0])

get_youtube_video_crawling()
 
BLACKPINK 2022 WELCOMING COLLECTION PREVIEW
https://www.youtube.com/watch?v=OZdK1czhuv8
CALLING ALL BLINKS: CLIMATE ACTION IN YOUR AREA! #COP26
https://www.youtube.com/watch?v=0pJ1oD-OXZo
LISA - 'SG' DANCE HIGHLIGHT CLIP
https://www.youtube.com/shorts/a74YfHF4TKY
LISA - 'MONEY' DANCE CHALLENGE
https://www.youtube.com/shorts/B8fapsO4P2g
BLACKPINK Performs Stay | Dear Earth
https://www.youtube.com/watch?v=rqVPhi0oTVU
BLACKPINK Talks Climate Change  | Dear Earth
https://www.youtube.com/watch?v=Aq27eTQMBJA
LISA - 'MONEY' DANCE PRACTICE VIDEO
https://www.youtube.com/watch?v=fr-eHz87XoM
LISA - 'LALISA' 0926 SBS Inkigayo
https://www.youtube.com/watch?v=aEiznLJCb9o
LISA - 'MONEY' EXCLUSIVE PERFORMANCE VIDEO
https://www.youtube.com/watch?v=dNCWe_6HAM8
LISA - FIRST SINGLE ALBUM LALISA ALBUM UNBOXING
https://www.youtube.com/watch?v=LuFyun11XNs

'tag'로 크롤링 하기 어려워서, html text 위치로 크롤링 하였습니다. 포기하지 말고, 다른 방식으로 꼭 해결해 보세요.

 

print('모두의 파이썬')

※좋아요/댓글은 서로를 응원합니다!

728x90
반응형