ํ์ฌ ๋๊ธ ํฌ๋กค๋ง ๊ด๋ จ ๋ฌธ์ ๊ฐ ์์ต๋๋ค
- ์์์ด ๋ธ๋ฝ ๋ ๊ฒฝ์ฐ ๋๊ธ ํฌ๋กค๋ง์ด ๋ถ๊ฐ๋ฅํ์ฌ ์ด๋ฅผ ์์ธ์ฒ๋ฆฌํ๋ ๋ถ๋ถ ์ถ๊ฐํ๊ฒ ์ต๋๋ค
youtube_crawler
์ ํ๋ธย API๋ฅผย ์ด์ฉํ์ฌ ๋งค์ฐ ์ฝ๊ฒ!ย ์ฌ๋ฌ ํ ์คํธ ์ ๋ณด๋ฅผ ํฌ๋กค๋งํ๊ณ ์ ์ฅํฉ๋๋ค
์ ์ api๋ฅผ ์ด์ฉํ์ฌ ํฌ๋กค๋งํ๊ธฐ์ ์์ ์ฑ์ด ๋์ต๋๋ค
ํ ๋น๋์ ๋ชจ๋ ์ฌ์ฉํ๋ฉด ํฌ๋กค๋ง์ด ๋์ง ์๊ธฐ์ apiํค๋ฅผ ์ฌ๋ฌ๊ฐ ๊ฐ์ง๊ณ ์์ผ๋ฉด ์ข์ต๋๋ค
๊ตฌ๊ธ ๊ณ์ ๋น 1๊ฐ์ฉ ๋ฐ๊ธ ๊ฐ๋ฅํ๋ ๊ตฌ๊ธ ๊ณ์ ์ด ๋ง๋ค๋ฉด ์ฌ๋ฌ๊ฐ์ ํค๋ฅผ ์ฌ์ฉ ๊ฐ๋ฅํฉ๋๋ค
๋ฐ๊ธ ๋ฐฉ๋ฒ
์ฒ์์ API key๋ฆฌ์คํธ๋ฅผ ์ ๋ ฅ๋ฐ์ ์๋์ผ๋ก ํ ๋น๋์ด ๋๋๋ฉด ๋ค๋ฅธ ํค๋ก ๋ฐ๊ฟ์ค๋๋ค.
ํฌ๋กค๋ง ํญ๋ชฉ
- ์์ย id (URL)
- ์ ๋ชฉ
- ์์ธ์ ๋ณด
- ๋๊ธ
- ์๋ง - pytube ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฌ์ฉ
pip install
pip install youtubecrawling
์๋ ์ฝ๋๋ก ๋ชจ๋ ํฌ๋กค๋ง์ด ๋๋ฉ๋๋ค
from youtubecrawling import youtubecrawling
key_list=[ "asdasd", "bddfg", "hgfd"]
# ํฌ๋กค๋ฌ ํธ์ถ
c = youtubecrawling.Crawler("D:/youtube_crawler", key_list)
# ๋ธ๋ํํฌ๋ก ์ ํ๋ธ ๊ฒ์ , id, ์ ๋ชฉ ํฌ๋กค๋ง
df = c.youtube_search("๋ธ๋ํํฌ")
# ๋ธ๋ํํฌ ์์ ์๋ง ํฌ๋กค๋ง
cap_no = c.make_captions(df)
# ์์ ๋๊ธ ํฌ๋กค๋ง
com_no = c.get_comments(df)
# ์์ธ์ ๋ณด ํฌ๋กค๋ง
desc = c.get_descriptions(df)
ํด๋ ๊ตฌ์กฐ
--์ง์ ํ ํด๋
:--videoIds
:--captions
:--comments
:--description
๊ฐ๋ฐ ๋๊ธฐ
์ ํ๋ธ ํฌ๋กค๋ง์ ํ๋๋ฐ ๊ณต์ ๋ฌธ์๋ฅผ ์ฐธ์กฐํ์ฌ ์ฝ๋๋ฅผ ์ง๊ณ
๋ด๊ฐ ์ํ๋ ํํ๋ก ๋ง๋ค๊ณ API์ ํ ๋น๋์ด ๋๋๋ฉด ์์ ๋ฐ๊ฟ์ค์ผ ํ๊ณ
์ด๋๋ถํฐ ๋๊ฒผ๋์ง ์ฐพ๊ธฐ ๊ท์ฐฎ์์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ง์ ๊ฐ๋ฐํ์์ต๋๋ค.
๊ฒ์๋ถํฐ csvํ์ผ๋ก์ ์ ์ฅ๊น์ง ํ๋ฒ์ ํด์ฃผ๊ธฐ ๋๋ฌธ์ ์ฌ์ฉ์๋ ๋ณ๋ค๋ฅธ ์ค์ ์ด ํ์ ์๋๊ฒ์ด ์ฅ์ ์ ๋๋ค.
๋ง์ด ์ฌ์ฉํด์ฃผ์๊ณ ๋ฌธ์ ์ ์ Issue๋ฅผ ํตํด ๋ง์ํด์ฃผ์๋ฉด ์กฐ์นํ๊ฒ ์ต๋๋ค
๊ฐ์ฌํฉ๋๋ค
์ฌ์ฉ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค์น ์ ์๋์ผ๋ก ์ค์น ๋ฉ๋๋ค
- google-api-python-client
- oauth2client
- pytube
- tqdm
- pandas
๊ธฐ๋ฅ ์์ธ ์ค๋ช
Crawler
yc = Crawler(path , key_list, key_index=0)
#์์
key_list=[ "asdasd", "bddfg", "hgfd"]
# "D:/youtube_crawler"์ ํ์ผ๋ค ์ ์ฅ
# api๋ key_list๋ก ์ฌ์ฉ
# 2๋ฒ์งธ ์ธ๋ฑ์ค์ ํด๋น๋๋ ํค๋ถํฐ ์ฌ์ฉ
yc = Crawler("D:/youtube_crawler", key_list, 2)
Crawler ๋ฅผ ๋ถ๋ฌ์ต๋๋ค
parameter
- path
- ์ ๋ณด๋ฅผ ์ ์ฅํ ์์น
- key_list
- ์ฌ์ฉํ API key list
- key_index
- ์ฒ์ ์ฌ์ฉํ key์ index
yotube_search
df = c.youtube_search(query, topicId=None, videoCaption=None, regionCode="KR")
#์์
# ๋ํ๋ฏผ๊ตญ ์์ ์ค nlp ๊ฐ์๋ฅผ ๊ฒ์ํด์ ๊ฐ์ ธ์ค๋๋ฐ
# topic์ ํ์ง ์๊ณ ์๋ง์ฌ๋ถ ์๊ด์์ด ๊ฐ์ ธ์จ๋ค
df = c.youtbue_search("nlp ๊ฐ์")
# ๋ํ๋ฏผ๊ตญ ์์ ์ค ๋ธ๋ํํฌ๋ฅผ ๊ฒ์ํด์ ๊ฐ์ ธ์ค๋๋ฐ
# Music ๊ณผ Entertainment์ ๊ด๋ จ๋ ์์์ ๊ฐ์ ธ์ด
df = c.youtube_search("๋ธ๋ํํฌ",topicId="/m/04rlf, /m/02jjt")
query๋ก ๊ฒ์ํ๊ณ ๊ด๋ จ ์์์ id๋ค์ ์ ์ฅํ๊ณ DataFrame์ ๋ฐํํฉ๋๋ค
parameter
-
query
- ๊ฒ์์ด
-
topicId
-
์ฃผ์ ์ ํ - ์ฌ๋ฌ๊ฐ ๊ฐ๋ฅ
-
topicId
Music topics
- /m/04rlf Music
- /m/05fw6t Children's music
- /m/02mscn Christian music
- /m/0ggq0m Classical music
- /m/01lyv Country
- /m/02lkt Electronic music
- /m/0glt670 Hip hop music
- /m/05rwpb Independent music
- /m/03_d0 Jazz
- /m/028sqc Music of Asia
- /m/0g293 Music of Latin America
- /m/064t9 Pop music
- /m/06cqb Reggae
- /m/06j6l Rhythm and blues
- /m/06by7 Rock music
- /m/0gywn Soul music
Gaming topics
- /m/0bzvm2 Gaming
- /m/025zzc Action game
- /m/02ntfj Action-adventure game
- /m/0b1vjn Casual game
- /m/02hygl Music video game
- /m/04q1x3q Puzzle video game
- /m/01sjng Racing video game
- /m/0403l3g Role-playing video game
- /m/021bp2 Simulation video game
- /m/022dc6 Sports game
- /m/03hf_rm Strategy video game
Sports topics
- /m/06ntj Sports
- /m/0jm_ American football
- /m/018jz Baseball
- /m/018w8 Basketball
- /m/01cgz Boxing
- /m/09xp_ Cricket
- /m/02vx4 Football
- /m/037hz Golf
- /m/03tmr Ice hockey
- /m/01h7lh Mixed martial arts
- /m/0410tth Motorsport
- /m/066wd Professional wrestling
- /m/07bs0 Tennis
- /m/07_53 Volleyball
Entertainment topics
- /m/02jjt Entertainment
- /m/095bb Animated cartoon
- /m/09kqc Humor
- /m/02vxn Movies
- /m/05qjc Performing arts
Lifestyle topics
- /m/019_rr Lifestyle
- /m/032tl Fashion
- /m/027x7n Fitness
- /m/02wbm Food
- /m/0kt51 Health
- /m/03glg Hobby
- /m/068hy Pets
- /m/041xxh Physical attractiveness [Beauty]
- /m/07c1v Technology
- /m/07bxq Tourism
- /m/07yv9 Vehicles
Other topics
- /m/01k8wb Knowledge
- /m/098wr Society
-
-
videoCaption
- Noneย โย ์บก์ ย ์ฌ์ฉย ์ฌ๋ถ์ย ๋ฐ๋ผย ๊ฒฐ๊ณผ๋ฅผย ํํฐ๋งํ์งย ์์ต๋๋ค.
- closedCaptionย โย ์บก์ ์ดย ์๋ย ๋์์๋งย ํฌํจํฉ๋๋ค.
- noneย โย ์บก์ ์ดย ์๋ย ๋์์๋งย ํฌํจํฉ๋๋ค.
-
regionCode
- KR - ํ๊ตญ
- US - ๋ฏธ๊ตญ
- https://ko.wikipedia.org/wiki/ISO_3166-1_alpha-2#KR ์ฐธ์กฐ
return
- ์ง์ ํ ๊ฒฝ๋ก ๋ด videoIdsํด๋์ ์ ์ฅ
- ํ์ผ์ด๋ฆ : ์คํํ ์๊ฐ_videoIds.csv
- pandas.DataFrame ๋ฐํ
make_caption
cap_no = c.make_captions(df)
#์์ด ์๋ง๋ ๊ฐ์ ธ์ค๊ธฐ
cap_no = c.make_captions(df,True)
ํด๋น ์์๋ค์ ์๋ง์ ๊ฐ์ ธ์จ๋ค
parameter
- df
- youtube_search๋ฅผ ํตํด ๋ฐํ๋ DataFrame
- columns= [ ' id', 'title']
- if_En
- ์์ด ์๋ง ๊ฐ์ ธ์ฌ์ง ๋ง์ง
return
- ์ง์ ํ ๊ฒฝ๋ก ๋ด catptionsํด๋์ ์ ์ฅ
- ์๋ง์ด ์๋ ์์ id ๋ฆฌ์คํธ ๋ฐํ
- columns=['index', 'contents']
get_comments
com_no = c.get_comments(df)
ํด๋น ์์๋ค์ ๋๊ธ๋ค๊ณผ ์ข์์ ์(๋๊ธ)๋ฅผ ๊ฐ์ ธ์ต๋๋ค
parameter
- df
- youtube_search๋ฅผ ํตํด ๋ฐํ๋ DataFrame
- columns = ['id' ,'title]
return
- ์ง์ ํ ๊ฒฝ๋ก ๋ด commentsํด๋์ ์ ์ฅ
- columns = ['author','comment','like']
get_descriptions
desc = c.get_descriptions(df)
ํด๋น ์์๋ค์ ์์ธ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ต๋๋ค.
parameter
- df
- youtube_search๋ฅผ ํตํด ๋ฐํ๋ DataFrame
- columns = ['id' ,'title]
return
- ์ง์ ํ ๊ฒฝ๋ก ๋ด descriptionํด๋์ ์ ์ฅ
- columns=['id', 'title', 'desc']
์งํ ๊ธฐ๋ก
0814
์ฝ๋ ํจ์ํ
์ข ๋ ์ต์ ํ ๊ฐ๋ฅํ ๊ฑฐ๊ฐ์ง๋ง ์ผ๋จ ์ฌ๊ธฐ๊น์ง
์ง์ญ์ ๋์ด์ฐ๊ธฐ ๋จ์๋ก ์ ๋ ฅํ๋ฉด ์๋์ผ๋ก ๋ชจ๋ ์ฐพ์์ค
apiํค๋ฅผ ์๋์ผ๋ก ๋ฐ๊ฟ์ค
์ฒ์์ ์ฌ์ฉํ apiํค ์ธ๋ฑ์ค ๋ฃ์ด์ค์ผํจ
๋ชจ๋ ํค ์ฌ์ฉ๋๋ฉด ๋๋จ
ํ ์์์ ์๋ ๋ชจ๋ ์๋ง(ํ, ์) ์ ์ฅ
0824
์ฝ๋ ๋ฆฌํฉํ ๋ง
ํค ๋ค์๋ถ๋ฌ์ค๋ ๋์ค ์๊ธธ์๋ ์๋ ์ค๋ณต ์ ๊ฑฐ
์ฃผ์ ์ถ๊ฐ
ํ๋ก๊ทธ๋จ ์งํ์ฌํญ ์๋ฆผ ์ถ๊ฐ
0825
title_description_parser ๊ธฐ๋ฅ ์ถ๊ฐ
- ๋๋ณด๊ธฐ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์จ๋ค
0926
pypi ๋ฐฐํฌ
Disclaimer
์ฌ์ฉ์๊ฐ ํด๋น ํ๋ก๊ทธ๋จ์ ์ฌ์ฉํจ์ผ๋ก์ ์๊ธฐ๋ ๋ถ์ด์ต ๋๋ ์ฑ ์์ ๊ฐ๋ฐ์๋ ์ฑ ์์ ์ง์ง ์์ต๋๋ค.