무료
다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결[Python 실전] 웹크롤링과 데이터분석 : 전세계 축구 선수 몸값 분석
깃허브에서 csv파일 불러오기 오류 문의
import pandas as pd # csv 저장 파일 불러오기 df = pd.read_csv("https://github.com/yak93tiger/dongsuh_files.git/transfermarkt_50.csv") print(df)에러메시지가 아래와 같이 나오네요 마지막 부분에...urllib.error.HTTPError: HTTP Error 404: Not Found 깃허브에 transfermarkt_50.csv 파일을 업로드 한 상태
- 미해결[Python 실전] 웹크롤링과 데이터분석 : 전세계 축구 선수 몸값 분석
국적 2개 출력
강의 코드대로 작성하면 국적이 하나밖에 나오지 않는데, 국적 칸에 두 나라가 들어가있는 경우는 어떻게 출력해야 할까요?
- 미해결[Python 실전] 웹크롤링과 데이터분석 : 전세계 축구 선수 몸값 분석
player_info =soup.find_all('tr' ) 로 선수 정보를 뽑지 않은 이유
선수들 관련 정보를 뽑을때 tr 만으로 아래 처럼 뽑지 않고player_info =soup.find_all('tr' ) 왜 아래처럼 odd랑 even 까지 써주어야 하나요?player_info =soup.find_all('tr', class_ = [ 'odd','even'] ) 제가 생각한 이유 : TR이 들어간 모든 정보를 가져오면, 필요없는것도 많으니까, 더 디테일하게 내가 원하는 odd와 even 이 들어간것만 뽑기 위해서인가요? 하지만 tr만으로 뽑앗을때나, even,odd를 넣어서 뽑앗을때 결과를 보면, 둘다 엄청 복잡하게 나오기 때문에, tr로 뽑았을때 불필요한 정보도 많이 뽑혔다라고 알기가 어렵기 때문에 왜 그러셨는지 이유를 알고 싶습니다
- 미해결[Python 실전] 웹크롤링과 데이터분석 : 전세계 축구 선수 몸값 분석
9:57 데이터 변경 .astype()
astype으로 데이터 변경이 안된다고 에러가뜨네요 구글링으로 pd.to_numeric() ,numpy 를 import 해서 라이브러리로 처리 하려고 해도 변경이 안되요 ㅠㅠ
- 미해결[Python 실전] 웹크롤링과 데이터분석 : 전세계 축구 선수 몸값 분석
수업 듣던중 오류가 발생하여 문의드립니다. 확인 부탁드려요ㅜㅜ
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
- 미해결[Python 실전] 웹크롤링과 데이터분석 : 전세계 축구 선수 몸값 분석
player_info = soup.find_all('tr', class_ = ['odd', 'even]) 함수가 동작하지 않습니다.
print(player_info)를 출력해 보니, 빈 리스트([])가 출력됩니다. 참고로, r.status_code를 출력해 보면 200이 아닌 404가 출력되고, print(soup)을 출력해 보면 아래와 같이 내용이 출력됩니다. !DOCTYPE html> <html class="no-js" lang="en"> <head> <script type="text/javascript"> !function () { var e = function () { var e, t = "__tcfapiLocator", a = [], n = window; for (; n;) { try { if (n.frames[t]) { e = n; break } } catch (e) { } if (n === window.top) break; n = n.parent } e || (!function e() { var a = n.document, r = !!n.frames[t]; if (!r) if (a.body) { var i = a.createElement("iframe"); i.style.cssText = "display:none", i.name = t, a.body.appendChild(i) } else setTimeout(e, 5); return !r }(), n.__tcfapi = function () { for (var e, t = arguments.length, n = new Array(t), r = 0; r < t; r++)n[r] = arguments[r]; if (!n.length) return a; if ("setGdprApplies" === n[0]) n.length > 3 && 2 === parseInt(n[1], 10) && "boolean" == typeof n[3] && (e = n[3], "function" == typeof n[2] && n[2]("set", !0)); else if ("ping" === n[0]) { var i = { gdprApplies: e, cmpLoaded: !1, cmpStatus: "stub" }; "function" == typeof n[2] && n[2](i) } else a.push(n) }, n.addEventListener("message", (function (e) { var t = "string" == typeof e.data, a = {}; try { a = t ? JSON.parse(e.data) : e.data } catch (e) { } var n = a.__tcfapiCall; n && window.__tcfapi(n.command, n.version, (function (a, r) { var i = { __tcfapiReturn: { returnValue: a, success: r, callId: n.callId } }; t && (i = JSON.stringify(i)), e.source.postMessage(i, "*") }), n.parameter) }), !1)) }; "undefined" != typeof module ? module.exports = e : e() }(); </script> <script> window._sp_ = { config: {"accountId":1254,"propertyId":7427,"baseEndpoint":"https://cdn.privacy-mgmt.com"}} </script> <script src="https://cdn.privacy-mgmt.com/wrapperMessagingWithoutDetection.js"></script> <meta charset="utf-8"/> <meta content="IE=edge" http-equiv="x-ua-compatible"/> <meta content="telephone=no" name="format-detection"/> <meta content="#1a3151" name="theme-color"> <link href="/favicon.ico" rel="shortcut icon" type="image/x-icon"/> <link href="/favicon-16x16.png" rel="shortcut icon" sizes="16x16"/> <link href="/android-chrome-192x192.png" rel="shortcut icon" sizes="192x192"/> <link href="/apple-touch-icon-152x152.png" rel="apple-touch-icon-precomposed"/> <meta content="width=device-width, initial-scale=1.0, maximum-scale=2.0, user-scalable=no" name="viewport"> <meta content="article" property="og:type"/> <meta content="https://tmssl.akamaized.net/images/tm_logo.png" property="og:image"/> <meta content="" property="og:description"/> <meta content="Error" property="og:title"/> <meta content="https://www.transfermarkt.com/spieler-statistik/wertvollstespieler/marktwertetop%20" property="og:url"/> <link href="https://www.transfermarkt.de" hreflang="de" rel="alternate"> <link href="https://www.transfermarkt.de" hreflang="de-LU" rel="alternate"> <link href="https://www.transfermarkt.at" hreflang="de-AT" rel="alternate"> <link href="https://www.transfermarkt.ch" hreflang="de-CH" rel="alternate"/> <link href="https://www.transfermarkt.com.tr" hreflang="tr" rel="alternate"/> <link href="https://www.transfermarkt.it" hreflang="it-CH" rel="alternate"/> <link href="https://www.transfermarkt.it" hreflang="it" rel="alternate"/> <link href="https://www.transfermarkt.pl" hreflang="pl" rel="alternate"/> <link href="https://www.transfermarkt.co.uk" hreflang="en-GB" rel="alternate"/> <link href="https://www.transfermarkt.co.uk" hreflang="en-IE" rel="alternate"/> <link href="https://www.transfermarkt.es" hreflang="es" rel="alternate"/> <link href="https://www.transfermarkt.es" hreflang="es-ES" rel="alternate"/> <link href="https://www.transfermarkt.es" hreflang="es-CL" rel="alternate"/> <link href="https://www.transfermarkt.es" hreflang="es-VE" rel="alternate"/> <link href="https://www.transfermarkt.es" hreflang="es-PE" rel="alternate"/> <link href="https://www.transfermarkt.es" hreflang="es-EC" rel="alternate"/> <link href="https://www.transfermarkt.es" hreflang="es-CU" rel="alternate"/> <link href="https://www.transfermarkt.nl" hreflang="nl" rel="alternate"/> <link href="https://www.transfermarkt.pt" hreflang="pt" rel="alternate"/> <link href="https://www.transfermarkt.ru" hreflang="ru" rel="alternate"/> <link href="https://www.transfermarkt.fr" hreflang="fr-CH" rel="alternate"/> <link href="https://www.transfermarkt.fr" hreflang="fr" rel="alternate"/> <link href="https://www.transfermarkt.fr" hreflang="fr-CA" rel="alternate"/> <link href="https://www.transfermarkt.fr" hreflang="fr-CI" rel="alternate"/> <link href="https://www.transfermarkt.fr" hreflang="fr-LU" rel="alternate"/> <link href="https://www.transfermarkt.fr" hreflang="fr-BE" rel="alternate"/> <link href="https://www.transfermarkt.com.br" hreflang="pt-BR" rel="alternate"/> <link href="https://www.transfermarkt.us" hreflang="en-US" rel="alternate"/> <link href="https://www.transfermarkt.us" hreflang="en-CA" rel="alternate"/> <link href="https://www.transfermarkt.co.in" hreflang="en-IN" rel="alternate"/> <link href="https://www.transfermarkt.co.za" hreflang="en-ZA" rel="alternate"/> <link href="https://www.transfermarkt.com" hreflang="x-default" rel="alternate"/> <link href="https://www.transfermarkt.com" hreflang="en" rel="alternate"/> <link href="https://www.transfermarkt.be" hreflang="nl-BE" rel="alternate"/> <link href="https://www.transfermarkt.com.ar" hreflang="es-AR" rel="alternate"/> <link href="https://www.transfermarkt.mx" hreflang="es-MX" rel="alternate"/> <link href="https://www.transfermarkt.co" hreflang="es-CO" rel="alternate"/> <link href="https://www.transfermarkt.my" hreflang="ms" rel="alternate"/> <link href="https://www.transfermarkt.jp" hreflang="ja" rel="alternate"/> <link href="https://www.transfermarkt.co.id" hreflang="id" rel="alternate"/> <link href="https://tmssl.akamaized.net/css/stylesheets/menue.css?lm=1634216161" rel="stylesheet" type="text/css"/> <link href="https://tmssl.akamaized.net/css/stylesheets/tm-grid.css?lm=1634216161" rel="stylesheet" type="text/css"/> <link href="https://tmssl.akamaized.net/css/stylesheets/main.css?lm=1634216161" rel="stylesheet" type="text/css"/> <link href="https://tmssl.akamaized.net/styles/tm-main.css?lm=1634216104" rel="stylesheet" type="text/css"/> <link href="https://tmssl.akamaized.net/assets/b7c5571cf8957553f95f6d9069eaed67/jui/css/base/jquery-ui.css?lm=1634216162" rel="stylesheet" type="text/css"/> <link href="https://tmssl.akamaized.net/css/stylesheets/main_desktop.css?lm=1634216161" rel="stylesheet" type="text/css"/> <link href="https://tmssl.akamaized.net/css/sprite-main.css?lm=1634216161" rel="stylesheet" type="text/css"/> <link href="https://tmssl.akamaized.net/css/chosen.css?lm=1634216161" rel="stylesheet" type="text/css"/> <link href="https://tmssl.akamaized.net/css/jquery-ui-1.10.4.custom.css?lm=1634216161" rel="stylesheet" type="text/css"/> <link href="https://tmssl.akamaized.net/css/jquery-ui-1.10.4.tm-theme.css?lm=1634216161" rel="stylesheet" type="text/css"/> <link href="https://tmssl.akamaized.net/css/stylesheets/main_werbung.css?lm=1634216161" rel="stylesheet" type="text/css"/> <link href="https://tmssl.akamaized.net/css/shortclasses.css?lm=1634216161" rel="stylesheet" type="text/css"/> <link href="https://tmssl.akamaized.net/css/print.css?_sn=1?lm=1634216161" media="print" rel="stylesheet" type="text/css"/> <link href="https://tmssl.akamaized.net/css/desktop.css?lm=1634216161" rel="stylesheet" type="text/css"/> <link href="https://tmssl.akamaized.net/css/domainspezifisch/desktop-com.css?lm=1634216161" rel="stylesheet" type="text/css"/> <link href="https://tmssl.akamaized.net/css/error-site.css?lm=1634216161" rel="stylesheet" type="text/css"/> <link href="https://tmssl.akamaized.net/assets/bdb39bc7538f732f9833170435d23c28/css/tooltipster.css?lm=1634216162" rel="stylesheet" type="text/css"/> <script src="https://tmssl.akamaized.net/js/vendor/jquery.min.js?lm=1634216153" type="text/javascript"></script> <script src="https://tmssl.akamaized.net/js/localStorage.js?lm=1634216153" type="text/javascript"></script> <script src="https://tmssl.akamaized.net/js/foundation.js?lm=1634216154" type="text/javascript"></script> <script src="https://tmssl.akamaized.net/js/main.js?lm=1634216154" type="text/javascript"></script> <script src="https://tmssl.akamaized.net/js/jquery-ui-1.10.4.custom.min.js?lm=1634216154" type="text/javascript"></script> <script src="https://tmssl.akamaized.net/js/clipboard.min.js?lm=1634216153" type="text/javascript"></script> <script src="https://tmssl.akamaized.net/js/chosen.ajaxaddition.jquery.js?lm=1634216154" type="text/javascript"></script> <script src="https://tmssl.akamaized.net/js/functions.js?lm=1634216153" type="text/javascript"></script> <script src="https://tmssl.akamaized.net/js/main_desktop.js?lm=1634216154" type="text/javascript"></script> <script src="https://tmssl.akamaized.net/js/chosen.jquery.js?lm=1634216154" type="text/javascript"></script> <script src="https://tmssl.akamaized.net/assets/bdb39bc7538f732f9833170435d23c28/js/jquery.tooltipster.js?lm=1634216162" type="text/javascript"></script> <title>Error | Transfermarkt</title> <script src="https://tmsi.akamaized.net/js/globals/tm-global-elements.esm.js" type="module"> /*<![CDATA[*/ /*]]>*/ </script><script nomodule="" src="https://tmsi.akamaized.net/js/globals/tm-global-elements.js" type="text/javascript"> /*<![CDATA[*/ /*]]>*/ </script> <script type="text/javascript"> tmData = { loggedIn : "0", tmTraffic: "0", }; </script> <script>// Set to the same value as the web property used on the site var gaProperty = 'UA-3816204-13'; // Disable tracking if the opt-out cookie exists. var disableStr = 'ga-disable-' + gaProperty; if (document.cookie.indexOf(disableStr + '=true') > -1) { window[disableStr] = true; } // Opt-out function function gaOptout() { document.cookie = disableStr + '=true; expires=Thu, 31 Dec 2099 23:59:59 UTC; path=/'; window[disableStr] = true; }</script> <script async="" src="https://www.googletagmanager.com/gtag/js?id=UA-3816204-13"></script> <script> window.dataLayer = window.dataLayer || []; function gtag() { dataLayer.push(arguments); } gtag('set', 'linker', { 'domains': [/^transfermarkt\.(com|de|nl|it|at|ch|es|fr|com\.tr|pt|tv|pl|co\.uk)$/]}); gtag('js', new Date()); gtag('set', { 'custom_map': {
- 미해결[Python 실전] 웹크롤링과 데이터분석 : 전세계 축구 선수 몸값 분석
df.info에서 자료형태 질문있습니다.
안녕하세요! 강의 정말 잘 듣고 있습니다. df.info 입력했을 때 값이 달라서 질문드려요. 먼저 df.info 했을 때 결과값 보여드릴게요. <class 'pandas.core.frame.DataFrame'> RangeIndex: 100 entries, 0 to 99 Data columns (total 7 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 ranking 100 non-null object 1 name 100 non-null object 2 position 100 non-null object 3 age 100 non-null object 4 nation 100 non-null object 5 team 100 non-null object 6 value 100 non-null object dtypes: object(7) memory usage: 5.6+ KB number와 age가 문자형태인 object로 나옵니다. df.describe를 했을 때, 평균이나 최빈값, 최대값 등이 안나와서 의아했는데 다 문자로 되어있어서 그랬나봐요. 그래서 본론인 질문드립니다. 질문 1. object로 읽었을 때 int64로 바꾸는 방법이 있는지 궁금해요. 불러들인 a[0].text, a[5].text에 int를 씌우면 되네요(수정). 질문 2. 제껀 왜 object로 읽힌걸까요? 입력한 값 아래 기입해두겠습니다. 좋은 강의 너무 감사합니다. :) for i in range(1, 5): url = "https://www.transfermarkt.com/spieler-statistik/wertvollstespieler/marktwertetop?ajax=yw1&page={}".format(i) # 여길 바꿔줘야 한다. # f ~ {i}는 변수처리를 의미한다. # 반복문을 통해 원하는 페이지까지 스크롤링하도록 i값을 메기면 된다. # url = f"https://www.transfermarkt.com/spieler-statistik/wertvollstespieler/marktwertetop?ajax=yw1&page={i}" r = requests.get(url, headers=headers) r.status_code soup = BeautifulSoup(r.text, 'html.parser') # 여기까지가 뷰티풀숲 사용하기 위한 준비 player_info = soup.find_all('tr', class_=['odd', 'even']) # 데이터 구조가 1, 2페이지 같은지 확인 한번 해보기! # ranking = [] # name = [] # position = [] # age = [] # nation = [] # team = [] # value = [] # 반복문에 리스트형을 만들면 계속 리스트가 빈 것으로 갱신되어 리스트 내 값이 쌓이지 않아. 리스트는 반복문 앞으로 빼준다. for i in player_info: a = i.find_all('td') ranking = a[0].text name = a[3].text position = a[4].text age = a[5].text nation = a[6].img['alt'] team = a[7].img['alt'] value = a[8].text.strip() player_list.append([ranking, name, position, age, nation, team, value]) time.sleep(2) # 데이터프레임을 만드는 과정엔 반복이 필요하지 않으니 나와줘야. # 반복은 페이지에서 정보를 빼오고 이를 리스트로 만드는 과정까지만 # 반복문을 사용할 땐 정확히 어느 과정까지 반복이 필요한지 명확히 해놔야 편해. df3 = pd.DataFrame(player_list, columns=['ranking', 'name', 'position', 'age', 'nation', 'team', 'value']) df3
- 미해결[Python 실전] 웹크롤링과 데이터분석 : 전세계 축구 선수 몸값 분석
error
url="https://www.transfermarkt.com/spieler-statistik/wertvollstespieler/marktwertetop" 이 부분에서 connectionError가 납니다.
- 미해결[Python 실전] 웹크롤링과 데이터분석 : 전세계 축구 선수 몸값 분석
transfermarkt.com 페이지에 대해서 status_code가 404로 오류가 나타납니다.
안녕하세요. headers={"User_Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.164 Safari/537.36"} url="https://www.transfermarkt.com/" r=requests.get(url,headers=headers) r.status_code 해당 코드 결과가 404로 나옵니다. 404의미를 찾아보니 해당 페이지가 없을 때 나오는 오류라고 하는데 해당 페이지는 잘 접속이 되는 상태입니다. 새로고침도 해보고 다시 켜보기도 하고 캐시도 삭제해본 상황 입니다. 오류의 이유가 무엇인지 알 수 있을까요?
- 미해결[Python 실전] 웹크롤링과 데이터분석 : 전세계 축구 선수 몸값 분석
강의 10:00 분쯔음 player 에 값 넣기
안녕하세요 for info in player_info: player = info.find_all("td") 이 부분이 이해가 안가는 것이 있어서요. 사실 문법 문제인것같은데.. for 반복문을 돌면서 player에 값을 대입하면 결국 마지막 info만 들어가게 되지않나요? 즉 25번째 선수의 정보만 player 배열에 값이 들어가게되지 않나요? += 를 사용하지 않았는데 왜 player 배열에 각 선수 정보들이 누적되서 들어가있는지 궁금합니다! 감사합니다.
- 미해결[Python 실전] 웹크롤링과 데이터분석 : 전세계 축구 선수 몸값 분석
질문있어요!
df.loc[df['age']>=30, ['name', 'value']] 이 부분이 TypeError Traceback (most recent call last) <ipython-input-108-dd0bf85b7488> in <module> ----> 1 df.loc[df['age']>=30, ['name', 'value']] ~\anaconda3\lib\site-packages\pandas\core\ops\common.py in new_method(self, other) 63 other = item_from_zerodim(other) 64 ---> 65 return method(self, other) 66 67 return new_method ~\anaconda3\lib\site-packages\pandas\core\ops\__init__.py in wrapper(self, other) 368 rvalues = extract_array(other, extract_numpy=True) 369 --> 370 res_values = comparison_op(lvalues, rvalues, op) 371 372 return self._construct_result(res_values, name=res_name) ~\anaconda3\lib\site-packages\pandas\core\ops\array_ops.py in comparison_op(left, right, op) 242 243 elif is_object_dtype(lvalues.dtype): --> 244 res_values = comp_method_OBJECT_ARRAY(op, lvalues, rvalues) 245 246 else: ~\anaconda3\lib\site-packages\pandas\core\ops\array_ops.py in comp_method_OBJECT_ARRAY(op, x, y) 54 result = libops.vec_compare(x.ravel(), y.ravel(), op) 55 else: ---> 56 result = libops.scalar_compare(x.ravel(), y, op) 57 return result.reshape(x.shape) 58 pandas\_libs\ops.pyx in pandas._libs.ops.scalar_compare() TypeError: '>=' not supported between instances of 'str' and 'int'이렇게 오류가 뜨는데 어떻게 해결해야 하나요??
- 미해결[Python 실전] 웹크롤링과 데이터분석 : 전세계 축구 선수 몸값 분석
number.append질문
안녕하세요 12:55분껄 실습을 하던도중 막혀서 질문드립니다. print(nunber)을 실행하니 td 클래스가 한번나오고 그다음에 순위가 반복되어서 나옵니다. 왜이러는 건가요??