๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ

    jupyter_notebook_config.json error ์—๋Ÿฌ ์›์ธ ๋ฐ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

    jupyter_notebook_config.json error ์—๋Ÿฌ ์›์ธ ๋ฐ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

    ์ฃผํ”ผํ„ฐ ๋…ธํŠธ๋ถ์—์„œ json ํŒŒ์ผ ๊ด€๋ จ ์—๋Ÿฌ๊ฐ€ ๋œจ๋Š” ๊ฒฝ์šฐ ์ฃผํ”ผํ„ฐ ๋…ธํŠธ๋ถ์—์„œ, ํ‰์†Œ ํŒŒ์ด์„ ๊ณผ vscode์—์„œ ์‹คํ–‰ํ–ˆ๋˜ ipynb ํ˜•ํƒœ์˜ ํŒŒ์ผ์„ ์—ด๋ ค๊ณ  ํ•˜๋‹ˆ๊น ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค The error was: SyntaxError: Unexpected end of JSON input Cannot upload invalid Notebook ๊ทธ๋Ÿฌ๋ฉด ์ด๋Ÿฌํ•œ ๊ฒฝ์šฐ์—๋Š” vscode ์—์„œ build : ctrl + shift + b ๋กœ ๋“ค์–ด๊ฐ€์„œ ์„ค์ •์„ ๋ณ€๊ฒฝํ•ด์ค˜์•ผํ•œ๋‹ค. { // See https://go.microsoft.com/fwlink/?LinkId=733558 // for the documentation about the tasks.json format "version": "2.0.0", "tasks": [ ..

    ํฌ๋กค๋ง ์…€๋ ˆ๋Š„ ๊ธฐ๋Šฅ๋“ค - ํฌ๋กค๋Ÿฌ ๊ธฐ๋ณธ ์‚ฌ์šฉ๋ฒ•

    Selenium Intro ๋ธŒ๋ผ์šฐ์ €๋ฅผ ์ปจํŠธ๋กค์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ด์คŒ Python ๊ฐ™์€ ๊ฒฝ์šฐ, 3.5 ์ด์ƒ๋ถ€ํ„ฐ ์ง€์›๋˜๋ฉฐ 3.6 ์ด์ƒ ๋ฒ„์ „ ๋ถ€ํ„ฐ pip ๋กœ ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ธŒ๋ผ์šฐ์ €๋Š” ํ•˜๋‹จ์— ๋ฆฌ์ŠคํŠธ์—… ์„ค์น˜ ์ฝ”๋“œ pip install selenium Driver ๋‹ค์šด๋กœ๋“œ ๋งํฌ , ํฌ๋กฌ,์—ฃ์ง€,ํŒŒ์ด์–ดํญ์Šค, ์‚ฌํŒŒ๋ฆฌ Chrome https://sites.google.com/a/chromium.org/chromedriver/downloads Edge https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/ Firefox https://github.com/mozilla/geckodriver/releases Safari https:/..

    ์œ ํŠœ๋ธŒ ๋Œ“๊ธ€ ํฌ๋กค๋ง ์—๋Ÿฌ

    ๋Œ“๊ธ€์ด ์ •๋ง ๋งŽ๊ฑฐ๋‚˜, ์—†๋Š” ๊ฒฝ์šฐ ๋ชจ๋‘๋ฅผ ๊ณ ๋ คํ•ด์•ผํ•จ ์Šคํฌ๋กค๋ฐ”๊ฐ€ ์ตœํ•˜๋‹จ๊นŒ์ง€ ๋‚ด๋ ค๊ฐ€๋Š” ์ฝ”๋“œ๋Š” ๋Œ“๊ธ€์ด ์ฝํ˜€์ง€์งˆ ์•Š์Œ ์ฒ˜์Œ์—๋Š” ๋“œ๋ผ์ด๋ฒ„ ๋ฌธ์ œ์ด๊ฑฐ๋‹ˆ ํ–ˆ๋Š”๋ฐ, ๋“œ๋ผ์ด๋ฒ„ ๊ฐ™์€ ๊ฒฝ์šฐ๋„ ๋™์ผํ•œ ๊ฒƒ์œผ๋กœ ๋งž์ถฐ์คฌ๊ณ , ์ด์ œ๋Š” ์ฐจ๋ผ๋ฆฌ ์ •ํ™•ํžˆ ์‚ฌ๋žŒ์ฒ˜๋Ÿผ, ํด๋ฆญํ•ด์„œ ๋Œ“๊ธ€์ˆ˜๋ฅผ ๋ณด๊ณ  ๊ทธ๊ฑฐ์— ๋งž๋Š” ์–‘๋งŒํผ๋งŒ ์Šคํฌ๋กค๋ฐ”๋ฅผ ๋‚ด๋ฆฌ๊ฒŒ๋”ํ•˜๊ณ , ๋Œ“๊ธ€์ˆ˜์˜ ์ƒํ•œ์น˜๋Š” 2000๊ฐœ ์ •๋„๋กœ ์ •ํ•ด๋†“์œผ๋ฉด ์–ด๋–จ๊นŒ ์‹ถ๋‹ค. ํ•˜... ๊ฐˆ๊ธธ์ด ๋ฉ€๋‹ค ์Šคํฌ๋กค ๋‚ด๋ฆฌ๋Š” ๊ฒƒ๋„ ์‹œ๊ฐ„์ด ๋„ˆ๋ฌด ์˜ค๋ž˜๊ฑธ๋ฆฌ๊ณ , ์ „์ฒด ๋Œ“๊ธ€ ์ˆ˜์™€ ๋Œ“๊ธ€์„ ์ €์žฅํ•œ ๋ฆฌ์‹œํŠธ์˜ ๊ธธ์ด๋ฅผ ๋น„๊ตํ•ด์•ผํ•˜๋‚˜ ์‹ถ๊ธฐ๋„ ํ•˜๊ณ , ์‹œ๊ฐ„์ ์ธ ๋ฉด๊ณผ ๊ธฐ์ˆ ์ ์ธ ๋ฉด์—์„œ ๊ณ ๋ฏผ์ด ๋งŽ์€ ํ•˜๋ฃจ๋„ค.

    Only the following pseudo-classes are implemented: nth-of-type. ์—๋Ÿฌ(error)

    Only the following pseudo-classes are implemented: nth-of-type. ์—๋Ÿฌ(error)

    ๊ตฌ๊ธ€์—์„œ ํฌ๋กฌ์„ ๋Œ๋ฆฌ๋ฉด, ์ด๋Ÿฐ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š”๋ฐ ๊ตฌ๊ธ€ ํฌ๋กฌ ๊ฐœ๋ฐœ์ž๋„๊ตฌ์—์„œ ๋ฌด์ž‘์ • css selector copy๋ฅผ ์‹คํ–‰ํ•ด์„œ ๋‚˜์˜ค๋Š” child ์„ ํƒ์ž์ธ nth-child ๋Š” ์ธ์‹์ด ์•ˆ๋œ๋‹ค๊ณ .... : ํ‘œ์‹œ๊ฐ€ ์•„๋‹Œ, - ํ‘œ์‹œ๋กœ ๋ฐ”๊ฟ”์ค€๋‹ค ์ฝœ๋ก ์„ ๋ฒ„๋ฆฌ๊ณ  nth-of-type ์œผ๋กœ ์ „๋ถ€ ๋ถ™์—ฌ์„œ ์ž‘์„ฑํ•œ๋‹ค nth of type tr:nth ->nth-of-type ์œผ๋กœ ๋ฐ”๊ฟ”์ค€๋‹ค. ๊ธฐ์กด์˜ ์ฝ”๋“œ comments = soup.select('#count > yt-formatted-string > span:nth-chile(2)') ๋ณ€๊ฒฝํ•œ ์ฝ”๋“œ # ๋Œ“๊ธ€ ์ˆ˜ , ์Šคํฌ๋กค๋ฐ”๋ฅผ ๋‚ด๋ ค์•ผ ๋ณด์ž„ comments = soup.select('#count > yt-formatted-string > span:nth-of-type(2)') com..

    ์œ ํŠœ๋ธŒ ์‚ฌ์ดํŠธ ํฌ๋กค๋ง(๋งํฌ, href)

    ์œ ํŠœ๋ธŒ ์‚ฌ์ดํŠธ ํฌ๋กค๋ง(๋งํฌ, href)

    ํ•ต์‹ฌ : select ๋กœ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ฌ ๋•Œ, ์š”์†Œ ๊ฐ’์€ ๋ฆฌ์ŠคํŠธ๋กœ ๋ฐ˜ํ™˜์ด๋จ!! ์œ ํŠœ๋ธŒ href ์‚ฌ์ดํŠธ ๋งํฌ ํฌ๋กค๋ง ํ•˜๊ธฐ ์š”์†Œ์˜ ์†์„ฑ ๊ฐ€์ ธ์˜ค๊ธฐ ์…€๋ ˆ๋Š„ ์ด์šฉ drver.find_element_by_xpath ์—์„œ url1 = driver.find_element_by_xpath('/html/body/ytd-app/div/ytd-page-manager/ytd-search/div[1]/ytd-two-column-search-results-renderer/div/ytd-section-list-renderer/div[2]/ytd-item-section-renderer[1]/div[3]/ytd-video-renderer[1]/div[1]/div/div[1]/div/h3/a') url1.get_attribute('href..

    'list' object has no attribute 'find_all' ์—๋Ÿฌ

    # 1๋ฒˆ. ์ „์ฒด ๊ธธ์ด ํŒŒ์•… def find_length(): print('์ „์ฒด ๊ธธ์ด ํŒŒ์•…') total = driver.find_elements_by_id('contents').find_all('ytd-video-renderer','style-scope ytd-item-section-renderer') print(len(total)) ํฌ๋กค๋ง์„ ์‹œ๋„ํ•˜๋Š”๋ฐ ์žˆ์–ด์„œ, global driver driver = webdriver.Chrome() ํฌ๋กฌ ๋“œ๋ผ์ด๋ฒ„ ๊ฐ™์€ ๊ฒฝ์šฐ, ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ˜•ํƒœ๊ฐ€ list ํ˜•ํƒœ์ด๋ฏ€๋กœ, beautifulsoup์œผ๋กœ ์ง„ํ–‰ํ•ด์•ผํ•œ๋‹ค.

    [Python] TypeError: 'NoneType' object is not iterable ์˜ค๋ฅ˜ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

    'TypeError: 'NoneType' object is not iterable'์—๋Ÿฌ๊ฐ€ ํŒŒ์ด์ฌ์—์„œ ๋ฐœ์ƒํ•œ๋‹ค๋ฉด, ๋ฐ˜๋ณต๋ฌธ์— ์‚ฌ์šฉํ•  ๊ฐ์ฒด๋ฅผ ์–ป์–ด์˜ค๋Š” ๊ณผ์ •์—์„œ ๋ฐœ์ƒํ•˜๋Š” ์—๋Ÿฌ๋‹ค. ๋‘ ๊ฐ€์ง€๋กœ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค. ํฌ๋กค๋ง์„ ํ•˜๊ณ  ์žˆ๋‹ค๋ฉด, ์ ๋‹นํ•œ ์‹œ๊ฐ„์„ ์ฃผ๋Š” ๊ฒƒ(time.sleep() ์„ ํ†ตํ•ด ํ˜„์žฌ ํŽ˜์ด์ง€์—์„œ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ์ œ๋Œ€๋กœ ์ž˜ ๊ฐ€์ ธ์˜ค๋Š” ์ž‘์—…์„ ์™„๋ฃŒํ•˜๋Š” ๊ฒƒ) ๊ณผ ๋งˆ์ง€๋ง‰์œผ๋กœ try except ๋ฌธ์„ ํ†ตํ•ด ๊ฐ’์„ ๊ฐ€์ ธ์˜ฌ๋•Œ, ๊ตฌํ•˜์ง€ ๋ชปํ•ด๋„ ์—๋Ÿฌ๊ฐ€ ๋‚˜์ง€ ์•Š๊ฒŒํ•ด์•ผํ•œ๋‹ค. ๋

    python ํฌ๋กค๋Ÿฌ ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ

    python ํฌ๋กค๋Ÿฌ ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ

    python ํฌ๋กค๋Ÿฌ๋ฅผ ๊ฐœ๋ฐœํ•˜๋ฉด์„œ, ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ์™€ ๋ฉ€ํ‹ฐํ”„๋กœ์„ธ์Šค๋ฅผ ๋™์‹œ์— ์‚ฌ์šฉํ•ด ์„ฑ๋Šฅ ๊ฐœ์„ ์„ ํ•ด๋ณธ ๊ณผ์ •์„ ์ •๋ฆฌํ•ด๋ดค๋‹ค. ์‚ฌ์‹ค์ƒ ํฌ๋กค๋Ÿฌ์— ์žˆ์–ด์„œ ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ๋ฅผ ์ด์šฉํ•˜๋ ค๋ฉด, ๊ฐ ์Šค๋ ˆ๋“œ์— ๋”ฐ๋ผ์„œ ํ•ด๋‹น ์ž‘์—…๋“ค์„ ์ž˜ ๋‚˜๋ˆ ์ค˜์•ผํ•˜๋Š”๋ฐ, ๊ฐ๊ฐ ์ตœ๋Œ€ํ•œ ๊ธฐ๋Šฅ๋ณ„๋กœ ๋ชจ๋“ˆ์„ ๋งŒ๋“ค์–ด ๋†“์•„๋„, ์‰ฝ์ง€๋Š” ์•Š์•˜๋‹ค. ๊ทธ๋ž˜์„œ ๋Œ€๋žต์ ์ธ ๊ฐœ๋…๊ณผ ์ดํ•ด์ •๋„๋กœ ํฌ์ŠคํŒ…์„ ์ง„ํ–‰ํ•˜๋ ค๊ณ  ํ•œ๋‹ค. ํฌ๋กค๋Ÿฌ ๊ฐ™์€ ๊ฒฝ์šฐ ๋ณดํ†ต ๋ฐ์ดํ„ฐ๋ฅผ ๋„คํŠธ์›Œํฌ๋กœ๋ถ€ํ„ฐ ๋‹ค์šด๋กœ๋“œํ•˜๋Š” ๋ถ€๋ถ„์—์„œ ๋ณ‘๋ชฉ ํ˜„์ƒ์ด ๋นˆ๋ฒˆํ•˜๊ฒŒ ๋ฐœ์ƒํ•œ๋‹ค. ์ด๋–„ ์„ฑ๋Šฅ์ด ๋งŽ์ด ๋–จ์–ด์ง„๋‹ค. ์ด๋ฅผ ๋ณธ์ธ ์ปดํ“จํ„ฐ์˜ CPU์˜ ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ์™€ ๋ฉ€ํ‹ฐํ”„๋กœ์„ธ์Šค๋ฅผ ํ™œ์šฉํ•ด ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œ์ผœ๋ณด์ž. ๋งˆ์น˜, ๋ฌผ์„ ๋งˆ์‹œ๊ธฐ ์œ„ํ•ด ์ž…์„ ์กฐ๊ธˆ์”ฉ ๋ฒŒ๋ฆฌ๊ณ  ์žˆ๋‹ค๊ฐ€, ๋‚ด๊ฐ€ ์ž…์„ ํฌ๊ฒŒ, ๋‚˜๋ž‘ ๋˜‘๊ฐ™์€ ์‚ฌ๋žŒ์ด ์—ฌ๋Ÿฌ๋ช…์ด์„œ ๊ฐ™์ด ๋ฌผ์„ ๋งˆ์‹œ๋Š” ๊ฒƒ์ด ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ๋ฅผ ํ•œ๋‹ค๋ผ๋Š” ๊ฒƒ์„ ์ดํ•ดํ•˜๋Š”๋ฐ ..

    [python] ํŒŒ์ด์„  pd.concat

    [python] ํŒŒ์ด์„  pd.concat

    ํŒŒ์ด์„  ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„ ํฌ๋กค๋งํ•˜๋ฉด์„œ, ์œ ์šฉํ•˜๊ณ  ํ•„์š”ํ–ˆ๋˜ ํ•จ์ˆ˜๋ฅผ ์ด์•ผ๊ธฐํ•˜๋ฉด, ํŒ๋‹ค์Šค ๋ชจ๋“ˆ์—์„œ๋Š” ํŠนํžˆ๋‚˜ ๋ฐ์ดํ„ฐํ”„๋ ˆ์ž„์„ ๋งŒ๋“ค๊ณ , ์ €์žฅํ•˜๊ณ , ํ•ฉ์น˜๊ณ ๋Š” ๊ฒƒ์„ ๋งŽ์ด ํ•˜์˜€๋Š”๋ฐ, ๋ฌด์—‡๋ณด๋‹ค ํ•ฉ์น˜๋Š” ์ž‘์—…์ด ๋งŽ์•˜๋‹ค. ์™œ๋ƒํ•˜๋ฉด ๊ฐ ํŽ˜์ด์ง€๋งˆ๋‹ค ํŒŒ์‹ฑํ•œ ๋ฐ์ดํ„ฐ๋“ค์„ ํ•˜๋‚˜์˜ ๋ฐ์ดํ„ฐํ”„๋ ˆ์ž„์œผ๋กœ ๋งŒ๋“ค์–ด๋‘๊ณ , ๊ทธ๋•Œ๊ทธ๋–„๋งˆ๋‹ค ๋ฐ์ดํ„ฐํ”„๋ ˆ์ž„์„ ํ˜•์„ฑํ•˜์—ฌ, ๊ธฐ์กด์˜ ํ‹€์— ๊ณ„์†ํ•ด์„œ ํ•ฉ์น˜๋Š” ๋ฐฉ์‹์œผ๋กœ ํ•˜์˜€๊ธฐ ๋–„๋ฌธ์ด๋‹ค. ๊ธฐ์กด์˜ ๋ฆฌ์ŠคํŠธ์—๋‹ค๊ฐ€ ๊พธ์ค€ํžˆ append๋ฅผ ํ†ตํ•ด ๋„ฃ์–ด์„œ ํ•œ๋ฒˆ์— ํ•  ์ˆ˜๋„ ์žˆ์ง€๋งŒ, ๊ทธ๋ ‡๊ฒŒ ๋˜๋ฉด, ๋‹จ์ ์€ ๋งŒ์•ฝ์— ์ค‘๊ฐ„์— ์ž‘์—…์ด ๋ฉˆ์ถ”๊ฑฐ๋‚˜ ํ•˜๋ฉด, ํ•ด๋‹น ๋ฆฌ์ŠคํŠธ์— ๊ฐ’์€ ์ €์žฅ๋˜์–ด ์žˆ์ง€๋งŒ, ์–ผ๋งˆ๋‚˜ ์ €์žฅ๋˜์–ด ์žˆ๋Š”์ง€, ๊ธธ์ด๋Š” ๋งž๋Š”์ง€์— ๋Œ€ํ•œ ํ™•์ธ์ž‘์—…์ด ์–ด๋ ต๊ณ , ์‚ฌ์‹ค์ƒ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜์—ฌ์•ผํ• ์ˆ˜๋„ ์žˆ๋‹ค๊ณ  ํŒ๋‹จํ–ˆ๋‹ค. ๊ทธ๋ž˜์„œ ํŒ๋‹ค์Šค pandas ์˜ pd.concat() ๋ฅผ ๋งŽ์ด..

    [python] ํฌ๋กค๋ง implicit wait vs time.sleep

    ํฌ๋กค๋ง ํ•˜๋‹ค๋ณด๋ฉด, ์ž ์‹œ ์ฝ”๋“œ ์‹คํ–‰์„ ๋ฉˆ์ถฐ์•ผ ํ•  ํ•„์š”๊ฐ€ ์ƒ๊ธด๋‹ค. ์ฃผ๋œ ์š”์ธ์€ 2๊ฐ€์ง€๊ฐ€ ์žˆ์„ ๊ฒƒ ๊ฐ™์€๋ฐ, ์ฒซ๋ฒˆ์จฐ, ์ฝ”๋“œ์˜ ์‹คํ–‰์†๋„๊ฐ€ ๋„ˆ๋ฌด ๋นจ๋ผ, ์›น ์„œ๋ฒ„์— ๋ฐ์ดํ„ฐ๊ฐ€ ์ „์†ก์ด ๋Š๋ ค์„œ, ์‹ค์ œ ์‚ฌ์ดํŠธ๊ฐ€ ์—ด๋ฆฌ์ง€๋„ ์•Š์•˜๋Š”๋ฐ ์ฝ”๋“œ๊ฐ€ ๋จผ์ € ์‹คํ–‰๋˜๋Š” ๊ฒฝ์šฐ์ด๋‹ค. ์ด๋Ÿฐ ๊ฒฝ์šฐ์—๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์”นํžˆ๊ฒŒ ๋œ๋‹ค. ๋‘๋ฒˆ์งธ, ๋ฐ˜๋ณต์ ์ธ ํฌ๋กค๋ง ์ž‘์—…์€ ์„œ๋ฒ„์— ๋งŽ์€ ๋ถ€ํ•˜๊ฐ€ ๊ฑธ๋ฆฌ๋Š” ๊ฒƒ์„ ์œ ๋ฐœํ•˜๋Š” ํฐ ์š”์ธ์ด๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ, ์ž์นซํ•˜๋ฉด ์šฐ๋ฆฌ์˜ ip๊ฐ€ ์ž ๊น ์ •์ง€ ๋‹นํ•  ์ˆ˜๋„ ์žˆ๋‹ค. ํฌ๋กค๋ง ์ž‘์—…์„ ์ง„ํ–‰ํ•˜๋‹ค๊ฐ€ ๊ฐ‘์ž๊ธฐ ip๊ฐ€ ๋ง‰ํ˜€๋ฒ„๋ฆฌ๋ฉด, ์ด๋ณด๋‹ค ์‹ฌํ•œ ๊ฒฝ์šฐ๋Š” ์—†์„ ๊ฒƒ์ด๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ ์ ์ ˆํ•œ ์‰ฌ์–ด๊ฐ์˜ ๋ฏธํ•™์ด ํ•„์š”ํ•œ ๊ฒƒ์ด๋‹ค. ๋ณธ๊ฒฉ์ ์œผ๋กœ time.sleep ๋ฌธ๊ณผ implicit wait ๋ฌธ์„ ๋น„๊ตํ•˜๋ฉด, ํ™•์‹คํžˆ time.sleep ๋ณด๋‹ค implicit wait ์ด ์ข‹์€ ๊ฒƒ ๊ฐ™..