존스 씨네 따라 하기 KEEPING UP WITH THE JONESES 공식 예고편 (한국어 CC)

이래서 내가 인사과를 좋아하는 거야 사람들에 대해 이런 자질구레한 것들을 배울 수 있다고

마가렛이 신뢰의 의미를 보여드리겠습니다 자갸, 나 올 여름에 진짜 뭐하지? 애들을 캠프에 보내고 화장실 리모델링 하고서 브루클린을 생각해봐요 벽돌로 된 벽과 소변기를요 멕은 제가 다시 서서 누길 원해요

제프와 캐런은 단순한 삶을 살고 있었다 새로 온 앞집은 이사하는 걸로 시간낭비 안 하려나봐? 하지만 예기치 않은 일이 저기, 자기야! 아직도 앞집 엿보고 있어? 안녕하세요 존스 부부예요 일어났다 거리가 너무나 아름다워요 중국어엔 이런 거리를 표현할 단어가 없어요

굳이 말을 한다면 身體和靈魂的 快樂的地方。 그 입에서 나오니 근사하게 들리네요 저 집 이상한 점이 있지 않아? 너무 과하게 잘 나가고 스타일리쉬하단 말야

'코브라 클럽'에 어서 오십시오! 생각하신 것과 좀 다르죠? 진짜 뱀같이 생겼네요 뱀술이에요 진짜 코브라죠 소 소다수는 없나요? 나탈리 존스를 미행 중이야 안녕하세요, 캐런? 나탈리! 팀에게 보이스메일 남기던 중이에요 제가 란제리 입어보는 거 들려주면 좋아하거든요 저희 부부의 취미죠

제프랑 그런 거 없으세요? 우린 후다닥 끝내요 애들이 방에 뛰어 들어올까봐요 "슈퍼배드" 감독 이자들 누구야? 증거가 필요해 이게 망상증이 아니란 것만 확인하고 싶어 이게 뭐야? 미사일이야! 나야! 이것들은 다 뭐야? 자갸, 당신이야? 엄마 좀 꼭 안아줘

올 가을 존스 부부는 자기들이 말하는 그런 사람이 아냐 신뢰란 이런 겁니다 사라져버리면 나쁜 일이 생길 수 있어요 존스 네다! 당장 차에 타요! 내가 셋 세면 뛰는 거다 알았지? 하나

둘 맙소사! 제프! 장난합니까? 내가 유리했는데! 당신 마누라보다? 모든 부부는 안녕, 얘야 아니, 그 쿠키들은 둘이 나눠 먹으란 거야 그럼 하나 남는 건 쪼개 먹어 쿠키 쪼개 먹어! 쪼개 먹어! 약간의 액션이 필요하다 이 넥타이엔 초소형 마이크가 들었어요 절대로 발각될 리 없어요

살려줘요! 살려줘요! 제프! 잠깐! 저희가 밖에를 잘 안 나가서 이 참에 최대한 즐겨보려 해요 10월 21일

파이썬 네이버 웹 스크래핑 (Naver Blog Web Scraping with Python) (with 한글자막)

안녕하세요 이수안 컴퓨터 연구소의 이수안입니다 오늘은 파이썬으로 네이버 블로그 다 긁어오는 그런 제목으로 실습을 하도록 하겠습니다 목차는 웹 스크래핑이 뭔지 그리고 파이썬 관련된 라이브러리를 설치해야 하고요 그리고 네이버를 긁어와야 하니까 네이버 개발자를 설정해야 합니다 그리고 네이버에서 제공하는 API예제를 돌려보고 실제 네이버 블로그를 다 긁어올 수 있는 그런 스크래퍼를 한 번 만들어 볼게요 자 그럼 웹 스크래핑이 뭐냐 스크래핑은 HTTP를 통해 웹 사이트의 내용을 긁어다 원하는 형태로 가공하는 것을 웹 스크래핑이라 합니다 그래서 웹 사이트의 데이터를 수집하는 모든 작업을 의미하는 데 여러분 아실거에요, 스크래퍼가 뭐냐면, 이런 도구들 긁어내는 이런 도구들이 있는데 크게로는 땅을 긁는 이런 기게도 스크래퍼라 할 수 있습니다 그런데 스크래퍼랑 자주 쓰는 어떤 워드가 있는데 크롤링, 파싱 이런게 있습니다 크롤러라는 게 있거든요 '웹 크롤러' 그 단어에서 유래된 게 크롤링이에요 그래서 www, 웹을 탐색해서 하는 그런 프로그램이 크롤러인데 거기에서 유래된 것이 크롤링이고 그래서 웹사이트에 있는 문서들, 그림 이런 링크들을 좇아서 막 긁어오는 이런 것들을 크롤러라고 합니다 그래서 크롤링이 그러한 작업을 하는 것으로 거기서 유래된 단어이고 사실상 크롤링의 핵심은 데이터를 쉽게 찾을 수 있도록 인덱싱을 구축한다는 것입니다 이게 제일 중요한 차이점입니다 그리고 '파싱'이 있는데 어떤 페이지에 내가 원하는 데이터를 특정 패턴으로 해서 추출 그리고 어떤 정보를 가공하는 것을 파싱이라고 합니다 문자를 토큰단위로 분해하거나, 그걸 통해서 문자를 파스 트리로 만들거나 그런 것들을 파싱이라고 하는데 그래서 스크래핑이라는 차이점이 두 개 다 있다 라는 것을 알고 계시면 좋을 거 같아요 그래서 파이썬 및 라이브러리 설치 파이썬 사이트에 들어가셔서 설치를 하시면 되고요 자기 컴퓨터 버전에 맞게 설치하시면 됩니다 그리고 라이브러리 설치가 있는데 라이브러리도 pip명령을 통해서 총 세 가지가 필요합니다 beautifulsoup4, requests, lxml 이 세 가지를 이걸 보고 하시든 설치를 하시면 될 것 같고요 중요한 건 네이버 개발자 설정인데 처음하시는 분들을 위해서 제가 보여드릴게요 보면 오픈 API이용을 신청하셔야 돼요 그래서 '네이버 개발자'라고 여러분들이 검색을 하셔도 되고 이 주소로 가셔도 되는데 우리가 지금 검색에 대한 이용을 신청해야 되기 때문에 '오픈 API 이용신청'을 누르시고 그다음에 각 애플리케이션 이름 정하고 사용 API는 검색으로 하시고 그 다음에 Android로 일단 설정하신 다음에 Android 웹패키지 URL에 서식을 맞춰서 쓰시면 되고요 그걸 등록하기 하면 이런 애플리케이션 정보를 줍니다 이 Client ID랑 Secret을 꼭 받아야 합니다 우리가 이걸 이용해서 만들어야 하기 때문에요 자 그래서, 설정을 잘 하신 다음에 이거를 신청하시면 될 거 같아요 이게 먼저 잘 진행이 되어야 합니다 한 번 보여드릴게요, 네이버 개발자 저는 미리 되어 있긴 한데 네이버 개발자 센터에 들어가셔서요 여기 보면 메뉴에 '검색 API'있죠 검색에서 '오픈 API이용 신청' 누르면 됩니다 여러분들 네이버 아이디로 로그인 하시고 그래서 이 각각을 눌러주신 다음에 comexample

naverblog 하신 다음에 등록 누르시면 됩니다 그러면 이렇게 두 가지가 뜨죠? 이 Client ID와 Secret이 필요하다는 겁니다 이걸 가지고 우리도 한 번 진행을 해 볼게요 자 그리고 네이버 API 예제가 있는데 아까 제가 빠르게 지나가 버렸는데 네이버 API- 검색 보면은 Java버전, PHP버젼, Node js, Python, C# 이렇게 있는데 Python 이 예제를 긁어 옵니다 이걸 가져오고요 그럼 이제 파이썬을 띄워볼게요 파이썬 IDLE를 띄우시고요 여기서 새로운 파일 하나 만들게요 그래서 아까 긁어온 거 붙혀넣기 하시고 그 다음에 우리가 받아왔던 Client ID 넣으시고 그 다음에 Client Secret 넣으시고 검색할 단어를 넣으시면 됩니다 뭘 검색하냐면, 대통령 이름으로 검색해 볼게요 저장하고 '네이버 API'로 저장하겠습니다 F5 자 됐습니다, 눌러보면 지금 현재 네이버블로그에서 '문재인 '워드가 들어간 전체 블로그를 이렇게 보여주고 있습니다 어렵지 않죠, 네이버 API돌리니까 바로 되죠 자 그래서 이렇게 수행을 했고 돌리면 되는데 문제는 네이버 블로그의 어떤 형식에 맞춰서 우리가 긁어 왔는 데 이게 다가 아니라는 거죠 왜냐면 네이버에서 블로그를 제공할 때 이걸 제이슨으로 데이터를 주고 하는데 그 데이터가 사실은 어떤 요약된 그러니까 전체 블로그의 내용을 다 주는 것이 아니고 일부만 주고 있습니다 그런데 사실은 블로그에 대한 내용을 다 보고싶다 그럴 때에는 조금 개발이 필요해요 그래서 그거를 한 번 우리가 같이 작업해 보도록 할게요 그래서 새로운 파일을 띄워 볼게요 이거를 일단 저장부터 해 볼까요 저장은 NaverBlogScraper할까요 그리고 몇 가지 re, json, 그 다음에 수학함수 쓰기 위해서 math datetime requests urllibrequest urlliberror 그 다음에 parse 아까 우리 parse배웠죠? 그 다음에 bs4, beautifulsoup4 이렇게 하면 되고요 그 다음에 네이버 Client ID랑 뭐가 있었냐면 네이버 Client Secret이 있었어요 우리가 받아왔습니다 벌써 받아 온 거를 여기다 추가해 주시면 돼요 아까 제가 여기에다가 놓은게 있기 때문에 이걸 가져 올게요 여러분들은 여러분들 받은 것을 쓰시면 됩니다 제가 받은 걸 그대로 따라하시면 조만간 안될 거예요 저는 이거를 이제 정지시킬 거니까요 자 이제 메인을 좀 켜볼까요 if __name__=='__main__' 그리고 숫자를 저장할 것 실제 질의할 query 그 다음 display는 우리가 검색 할 때 몇 개 단위로 출력을 할 것인지에 대한 건수를 display할 수 있고요 start는 1, 1부터 우리가 하겠다 그 다음 정렬 방식은 similarity에 따라서 유사도순으로 할 거냐 그리고 날짜 순으로 할 거냐 두 가지의 옵션이 있는데 우리는 날짜순으로 할게요 최신 데이터를 긁어 오기 위해서 그 다음 파일 저장을 해야 하는데 fs 파일 저장을 위해서 정의를 하고 파일 저장은 txt파일로 하겠다 그런데 큐어리로 준 검색어에 따라서 검색어 이름을 가지는 텍스트 파일로 만들어 보겠습니다 타입은 당연히 utf-8로 하고요 그 다음에 blog count, 전체 갯수를 가져오기 위해서 전체 갯수를 가져와야 해요 그래서 blog count 왜냐하면 천 개 이상이 될 수도 있잖아요 천 개 이상이 되면, 천 개까지 밖에 못 긁어 옵니다 제한이 있어요 그래서 제한을 가진 상태로 천 개만 가져오기 위해서 이렇게 하는 거에요 이거 좀 이따가 할게요 fscolse하고 먼저 이 함수를 구현하고 뒤에 나머지를 칠게요 마찬가지로 get_blog_count를 만듭니다 이 함수에서는 질의, query랑 display를 받아올게요 그 다음에 인코딩을 좀 해줘야 해요 encode query 해가지고 아까 우리가 import했던 urllib에서 parsequote query를 이걸로 바꿔서 인코드된 형태로 바꿔줍니다 그 다음 openapi openapi 이렇게 바꿔주고요 + encode_query로 바꿔주고요 ullib

requestRequest(search_url) 이렇게 하면 우리가 만들었던 url형태로 요청하는 거에요 그런데 그냥 하면 안되요 그냥 하면 거부 당할 겁니다 이 api로부터 왜냐하면 네이버에서 받아왔던 ID와 Secret을 주지 않았기 때문에 거부 당하는데 이것을 주면 인증을 받았기 때문에 인증된 사람으로서 권한이 있기 때문에 우리를 허용해 주겠죠 responses = urllibrequst urlopen 그 다음에 response code를 좀 받아올게요 getcode 왜냐하면 코드를 여러가지 주는 데 과연 접속이 잘 됐는 지 코드를 받아서 보는 데 웹에서 200이 정상 접속이죠 정상적으로 접속했을 때 200번을 주죠 read, 이게 실제 읽어 들이는 거에요 body에서 dictionary 형태로 저장을 할게요 json을 가져올 텐데, 네이버에 이 질의의 결과로 json을 넘겨 주는 데 그 json을 dictionary로 다 저장합니다 utf-8, 모두 utf-8이에요 그리고 뭐가 들어 오는지 프린트로 모든 결과를 출력하는 것으로 한 번 해 볼게요 왜냐하면 다른 용도로 쓰실 분 들도 참고해서 사용하실 수 있도록 lastBuildDate이 있습니다 이거는 실제 json으로 넘어오는 것 중에 실제 최종 날짜 최종 만들어진 날짜를 반응해준 거고요 그 다음 total은 전체 갯수 Start display 이렇게 넣어 놓은 걸 한 번 출력해 보고 그리고 만약에 total이 0이다 검색된 결과가 없다 그러면 blog_count를 0으로 맞춰 줄게요 왜냐하면 나중에 반환을 해줘야 하니까 왜나면 이 함수 이름이 get blog count잖아요 전체 카운트의 갯수를 넘겨 주어야 되고요 total에 cell 함수를 통해서 전체 total이 만약에 display, 10개죠 10개로 나눠서 나온 결과 값을 여기다 넘겨줍니다 그래서 blog_total이 만약에 1000이상이다 그러면 blog_count는 1000으로 맞춰줍니다 그런데 그게 아니다 그러면 blog_count는 blog_total로 넘겨줍니다 이게 뭐냐면 천 개가 넘을 경우에는 제한이 있다고 그랬죠 그래서 최대 천개로만 이렇게 조건문을 넣어 줬고요 그리고 blog 전체 total과 count를 출력 해 볼게요 왜냐하면 이게 몇 개까지 받아오는 지를 보고 그 다음에 뭐 해야 되냐 return을 쳐줍니다 이렇게 return을 해주고요 이게 잘 되는지 한 번 확인 해 볼게요 중간에 오타가 났을 수도 있고 자 이렇게 에러가 나죠? 오타가 많네요 됐습니다 실했했고요 보니까 지금 검색된 '문재인' query로 검색해 보니까 굉장히 많은 숫자가 나왔고 이거를 다 긁어 올 순 없고 천 개만 blog_count를 조절해서 천개만 긁어오는 걸로 그러면 이제 sort를 "date"을 줬기 때문에 최신 글로만 천 개를 긁어 오겠죠 그리고 이제 만들어야 될 건 이제 이건 기존의 네이버 api랑 비슷한데 뭐가 필요하냐면 전체 블로그 포스팅 내용을 긁어오고 싶다 이럴 때는 우리가 코드를 추가해 줘야해요 글로벌로 변수 넘버랑 파일 시스템을 가져올게요 이거랑, 이거 좀 가져올게요 그리고 아까 그 코드 카드 좀 가져 올게요 이렇게 그냥 가져 오는 데 물론 이 뒷 부분을 좀 고쳐야 됩니다 왜냐, 이제는 그냥 질의만 날리는 것이 아니라 여기에 옵션을 좀 주어야 해요 우리가 질의 던질 때 display를 왜냐하면 연달아서 계속 할 거기 때문에 display를 옵션으로 좀 주고 start로 추가적으로 조건을 넣어주고 그 다음에 소스도 넣어줍니다 저장을 하고요 만약에 response코드가 200이면 정상이죠 response_body response-body_dict = jason decode 아까 우리가 했던 utf-8로 가져오고 그리고 정상인데 거기에 item_index로 json이 해당하는 블로그가 여러 개 나오면 그걸 다 하나의 큰 덩치로 주는 데 그거를 하나 씩 나눠서 접근을 하기 위해서 이렇게 코드를 쳐 줍니다 그래서 items라는 코드로 들어가 있고요 items 닫아주고 됐습니다 그 다음에 try 그 다음에 이렇게 tag가 들어올 수 있어요 그래서 그 태그부분을 지워서 사용해야 하기 때문에 우리가 regural expression으로 제거해주는 부분을 넣어주고요 그래서 regular expression에서 remove_html_tag 태그를 없애주는 정규표현식을 사용해서 만약에 태그와 관련된 부분이 들어왔을 땐 없애버려라 그래서 response_body_dict dict에다가 이제 여기에 item 그 다음에 item_index 그 다음에 title title은 블로그의 실제 주소를 의미합니다 그 다음에 link가 있습니다 그냥 가져올게요 링크는 주소가 오는데 그 주소가 쓸데없는 코드가 들어 갈 수 있어요 amp 저렇게 그래서 amp 이 부분을 없애주는 걸로 바꾸고 그 다음에 description description도 마찬가지로 태그가 들어올 수 있어요 그래서 description, item에 title말고 description으로 바꿔주고요 그리고 뭐가 남았냐면 blogger name blogger name은 blogger link 이거는 실제 포스트의 주소가 아니라 블로거의 블로그 주소가 있죠? 그 블로거 주소를 가져오는 코드입니다 그 다음은 Post Date인데 이거는 그냥 가져올게요 이렇게 변환하는 데 그냥 가져올게요 Post Date, 주는 대로 받아 오겠습니다 그러면 json에서 오는 결과들이 하나씩 items에 다 들어가 있는데 그 items에 있는 것들을 다 끄집어서 가져올게요 그 다음에 print, print를 하는데 이걸 좀 구분을 하기 위해서 구분자로 아무거나 구분을 해 줍니다 이건 블로그마다 파일을 쓸텐데 그걸 구분해서 보여주기 위해서 이렇게 하고요 그리고 이 #은 넘버의 의미로 제가 몇 번째 블로거인지 표시할 용도로 사용합니다 그 다음에 title link Description 그리고 blogger name blogger의 Link Date 이거는 실제 블로거의 포스트가 기재된 날짜가 나오겠죠 그 다음에 post code에서 이게 뭐하는 거냐면 저 정보들은 네이버 오픈api에서 제공해 주는 정보예요 우리는 그게 아니라 블로그에 실제 포스트된 내용이 필요하잖아요 그래서 그 내용을 긁어 오기 위해서 이제서야 BeutifulSoup를 사용합니다 그래서 BeutifulSoup을 통해서 다시 한 번 내용에 접근해가지고 가져옵니다 그래서 BeutifulSoup으로 선언을 해주고요 이 블로그에 사실은 특성이 있어요 네이버 블로그는요 마우스로 긁어오지 못하게 하거나 이렇게 오른 쪽 버튼을 클릭을 막기 위해서 iframe으로 다시 만들어 놓은 게 있는데 그래서 iframe의 frame이라는 html부분을 들어가야해요 들어가면 실제 그 블로거의 포스트 url을 뽑을 수 있어요 그래서 그거를 가져오는 데 그냥 가져오면 안되고 그 코드 url에서 "blog

navercom" + 그리고 메인프레임에서 get해서 소스부분을 가져옵니다 그래서 아이프레임에서 소스 부분에 이 코드를 가져 온 다음에 그걸로 접속을 해서 우리가 실제적인 블로그 포스트에대한 내용을 긁어오기 때문에 여기에 다시 한 번 blog_post_url이라는 주소로 접근을 합니다 그리고 그 텍스트를 가져오고요 text 그리고 blog_post 이거는 다시 한 번 또 접근해야 돼요 왜냐 접근했는데 iframe으로 매킹되어 있잖아요 그래서 iframe이 실제 주소를 가져오면 진짜 블로그 포스트에 접근 할 수 있거든요 그래서 거기에 접근하기 위해서 이렇게 우리가 사용을 합니다 그래서 이렇게 가져오고 BeautifulSoup으로 한 번 더 접근을 합니다 그리고 이게 진짜 blog 포스트에 대한 그 내용인데 여기에 실제 내용은 블로그 전체에 여러가지 메뉴도 있고 이러잖아요 그런데 postViewArea라고 있어요 그 postViewArea가 실제 블로그 내용이 여기에 들어가 있습니다 그래서 postViewArea로 선택을 해줍니다 이 태그로 선택을 해주고 그리고 이걸 이제 가져와야죠 이게 블로그 진짜 포스팅된 컨텐트에요 blog_post_content_text 그리고 스트링으로 캐스팅 해줘서그 컨텐츠를, 실제 내용을 가져옵니다 이제 전체, ufl discription만 주는 것이 아니라 전체 full 컨텐츠가 되겠죠 그런데 replace를 좀 해줄게요 replace로 뭘 해주냐 개인 문자 두 개가 있으면 그거를 하나로 바꿔 주는이런 걸로 좀 넣어줄게요 그 다음에 확인해서 프린트를 해도 되는 데 저희는 이제 파일을 좀 쓸게요 왜냐하면 전체 내용을 프린트 하려면 좀 많잖아요 블로그 내용이 긴 것도 많으니까요 그래서 이거는 파일에 써서 나중에 데이터 분석이나 활용할 때 쓰기 위해서 파일에 쓰도록 할게요 그런데 파일에서도 구분자가 필요하죠 구분자로 이렇게 포스트 마다 띄어서 구분할 용도로 가지고 있고요 그 다음에 except 만약에 못할 경우에는 그냥 넘어가자 그런데 거의 다 할거에요 그럼 이렇게 나오겠죠 진짜 잘 되는지 볼까요 아마 오타가 있겠죠 아 이거 안했구나 아까 우리가 메인에, 나중에 빼놨는데 그 부분을 해 볼게요 for start_index in range star, 1부터죠 우리가 받아온 카운트 갯수만큼 반복을 돌고 그만큼, get_blog_post, 접속해서 가져와야 겠죠 실제 블로그 내용으로 자! F5 아 이게 빠졌네요 F5 안되네요 천까지 긁어왔고 1부터 1000+1까지 돌아야 하는 데 안되고 있죠? 어디서 에러가 났어요 접속이 잘 됐는지는 출력을 한 번 해 볼까요? 자 접속이 잘 되고 있네요 이 부분은 통과해서 각각 가져오고 내용을 아마 이 부분이 좀 잘못된거 같아요 이 부분을 한 번 좀 볼게요 자 items 다 맞고 description이 틀렸네요 description 틀렸고 나머진 맞겠죠? 자 이렇게 블로그 실제 내용을 파일에 저장하고 있고 이렇게 계속 긁어 옵니다 총 갯수가 천 개이니까 천 개를 이렇게 긁어오는 스크래퍼를 우리가 만들었습니다 그래서 그 내용이 실제 파일에 다 저장을 하고 있겠죠? 저 파일에 쓰는 부분 그래서 이렇게 스크래퍼를 완성했습니다 자 이렇게 긁어 오는 거죠 그래서 이게 실제 네이버에 진짜 포스팅된 내용들을 다 긁어 오는 겁니다 그런데 여러분, 이 포스팅은 블로그를 운영하는 사람들이 올린 거 잖아요 그래서 수집을 하고 다시 이 내용을 어딘가에 공개하면 안됩니다 공개하는 것은 불법이에요 그러니까 이렇게 수집해서 분석용도로만 사용하시고 다시 공개는 하시면 안됩니다 이렇게 해서 네이버 블로그를 다 긁어오는 그러한 파이썬 코드를 만들어 봤고요 다음에 더 재미있는 강의로 찾아 뵙도록 하겠습니다 감사합니다

Teaser – CS50's Web Programming with Python and JavaScript

BRIAN YU : 안녕하세요 저는 브라이언 유입니다

저는 웹 프로그래밍 강사입니다 파이썬과 자바 스크립트 이 과정은 하버드 CS50이 출발하는 곳을 선택하고, 웹 애플리케이션의 설계와 구현에보다 깊이 관여 라이브러리에서 프레임 워크를 사용하여 Python, JavaScript 및 SQL 사용 (Flask), 장고 (Django), 부트 ​​스트랩 (Bootstrap) 전반적으로 기회가있을 것입니다 실습 프로젝트를 수행하고, 사용 및 쓰기 학습 API, 사용자 정의 및 대화 형 사용자 인터페이스 설계 및 클라우드 활용 Github 및 Heroku와 같은 기술 학기가 끝나면 지식과 경험으로 나옵니다 귀하를 활성화하고 권한을 부여하는 원칙, 언어 및 도구 인터넷에서 웹 응용 프로그램을 디자인하고 배포하는 방법 Python과 Javascript로 웹 프로그래밍에 오신 것을 환영합니다

[음악 재생]

President Trump Meets with the Prime Minister of the Czech Republic

Trump President : 음, 고맙습니다 국무 총리를 영광으로 생각합니다

체코 공화국 Babiš 총리와 Babiš 총리, 여기와 주셔서 대단히 감사합니다 위대한 영광입니다 위대한 나라 그것은 – 아주 잘하고있는 체코 공화국입니다

경제적 측면 및 기타 모든 측면에서 매우 안전한 나라 항상 아주 안전한 나라였습니다 강력한 군대 강한 사람들 우린 아주 좋은 관계가 있어요

체코 공화국과 미국에서 우리는 많은 무역과 많은 일을합니다 상상할 수있는 모든 것 하지만 전 총리 만 말하고 싶습니다 당신을 영광으로 생각합니다 고맙습니다

Babis 수상 : 감사합니다 트럼프 회장 : 고마워요 부디 바비스 총리 : 대통령 각하, 트럼프 부인, 백악관에 오신 것을 진심으로 환영합니다 저와 제 아내가 여기에있는 것이 대단히 기쁩니다

우리 나라는 미국 이후 동맹국입니다 100 년 전에 우리 공화국 최초의 설립을 도왔습니다 그리고 오늘은 매우 상징적 인 날입니다, 대통령 님, 오늘은 우리 대통령의 생일이기 때문에, Tomáš Garrigue Masaryk 그리고 그는 그와 동시에 미국인과 행복하게 결혼했습니다 트럼프 회장 : 아 – Babis 수상 : 그래서 우리는 NATO의 동맹국입니다

우리는 20 년 전에 합류 한 것을 기념합니다 우리는 3 월 12 일에 다음 주에있을 예정입니다 그리고 우리 병사들은이 미군 병사들과 함께 싸우고 있습니다 트럼프 회장 : 그렇습니다 Babis 총리 : – 국제 테러리스트 반대

트럼프 회장 : 그렇습니다 바비스 (Babis) 총리 : 체코는 위대한 국가입니다 작은 나라지만 매우 아름답습니다 세계에서 6 번째로 안전한 도시입니다 올해는 30 년을 축하합니다

벨벳 혁명 이후, 체코 사람들은 마침내 민주주의와 자유를 얻었다 그래서 체코 사람들은 창조적이고 혁신적이며 훌륭한 사람들입니다 네가 브뤼셀에서 말했다 트럼프 회장 : 네 바비스 총리 : 네

트럼프 회장 : 그건 사실입니다 그건 사실이야 Babis 총리 : 무한한 잠재력을 지니고 있습니다 그리고 우리 양자 비즈니스 관계가 커지고 있습니다 트럼프 회장 : 그렇습니다

Babis 총리 : 우리 투자자들이 투자하고 있습니다 이미 수천 개의 일자리를 창출했다 대통령 님, 2019 년 국무부 주소를 보았습니다 나는 네 계획을 완벽하게 이해한다 미국을 다시 멋지게 만드는 법

체코 공화국을 다시 훌륭한 계획으로 만들려는 비슷한 계획이 있습니다 그래서 나는 우리의 토론을 고대한다 국제 무역, 에너지, 안전, 사이버 공격 및 – 트럼프 회장 : 네 Babis 총리 : – 불법 이민 물론 국제 테러리스트들도 마찬가지입니다 다시 한 번 감사드립니다 – 우리를 여기서 받아 들여야합니다

Trump President : 음, 고맙습니다 Babis 수상 : 감사합니다 고맙습니다 트럼프 회장 : 정말 영광입니다 그리고 그것은 위대한 나라입니다, 그리고 그것은 매우 창조적 인 나라입니다

우리는 사이버와 다른 많은 것들을 함께 연구하고 있습니다 잘 작동합니다 그래서 나는 우리와 함께있는 것에 대해 당신에게 감사하고 싶다 그리고 영부인을 대신해서 그리고 너 오늘 아침 일을 잘 했어

이해해 국무부에서 Melania는 많은 사람들에 의해 오늘 아침에 아주 잘 받았습니다 정말 고마워요 큰 모두들 감사합니다

고맙습니다 The Press : Mr President, 사면에 대한 이야기가 있습니다 귀하의 대리인, 귀하의 변호사, 마이클 코헨 법률 팀 이요? 트럼프 회장 : 대단히 감사합니다 대단히 감사합니다

Press : 체코 대통령과 체코 공화국 간의 무역 와 미국 지금 성장하고 있습니다 아주 좋아요 – 트럼프 회장 : 말해봐? 보도 자료 : – 매우 높은 수치 그러나 자동차에 대한 잠재적 인 관세 체코 경제에 매우 해 롭습니다 트럼프 회장 : 나는 이해하지 못합니다 고맙습니다

기자 : 김정은에 실망하셨습니까? 김정은에 대해 실망하십니까? 그리고 북한의 핵 활동? 트럼프 대통령 : 조금 실망했습니다 조금 언론 : (들리지 않음) 트럼프 회장 : 우리가 보게 될 것입니다 약 1 년 후에 알려 드리겠습니다

Ebay web scraping with Python and Beautiful Soup: demand research | Projects

안녕하세요 여러분, 오늘은 또 다른 프로젝트가 있습니다 이베이 웹입니다

스크래퍼 당신이 eBay 사업을 시작하여 일부를 판매하기를 원한다고 상상해 봅시다 높은 수요가 있고 그것을하는 제품 당신은 판매 할 틈새 또는 제품을 선택해야합니다 그래서 당신은 어떤 것을 얻을 필요가 있습니다 이베이 마켓 플레이스의 현재 상황에 대한 데이터

그리고 그 중 한 가지 방법은 필요한 데이터를 수집하는 것은 제품 또는 카테고리에 대한 수작업 연구를하는 것입니다 상품 그러나 그것은 지루하고 시간이 많이 걸리는 작업이지만, 일부 Python 프로그래밍 기술은 필요한 데이터를 거의 자동으로 수집하는 데 도움이됩니다 그리고 오늘 우리는 일부 데이터를 수집 할 ebay 웹 스크래퍼를 작성하고 CSV 파일에 기록하십시오 시작하자

ebaycom 웹 사이트를 열고 I 남성 시계 카테고리를 연구하고 싶습니다 나는 검색 창에 검색 요청을 입력하고있다 – "men 's watch"와 우리는 얻었다 검색 결과 한 줄의 코드를 작성하기 전에 수동으로해야합니다

eBay 웹 사이트를 탐색하고 스크레이퍼를 어떻게 할 것인지 결정하십시오 그럼 열자 1) 제목, 2) 가격, 3) 판매량을 수집하고 싶습니다 항목은 여기에서 또는 여기에서 얻을 수 있습니다 그래서 Scraper는 다음을 할 것입니다

1) eBay 웹 사이트에 요청하고 색인 페이지의 HTML 코드를 가져와야합니다 이 제품 제품 목록이있는 페이지

2) 그러면 모두를 수집해야합니다 세부 페이지 링크 이 하나,이 하나,이 하나, 등등 3) 그리고 나서 필요 데이터 – 제목, 가격 등을 파싱하고 4) 데이터를 CSV 파일

우리 스크레이퍼를 쓰자 프로젝트 폴더를 생성하고 새로운 'ebay_scrapperpy'라는 이름의 파이썬 스크립트 이제는 파이썬 라이브러리 그래서 저는 파이썬 3을 위해 'pip3'을 사용하고 있습니다

윈도우즈를 사용한다면 운영 체제에는 'pip'가 하나만 있습니다 그래서 'pip3 설치 요청을 사용하고 있습니다 beautifulsoup4 lxml' 이미 설치했는데 다음에는 Scrapper의 진입 점을 만듭니다 'main 인 경우'차단 IF 조건은 파일이 'ebay_scrapperpy'가 콘솔에서 직접 실행되었는지 여부

파일이 콘솔에서 실행하면 __name__ 속성은 '__main__'과 같지만 파일을 다른 스크립트로 가져 오면 해당 __name__ 속성에 이름이 포함됩니다 파일의 'ebay_scrapper'이 경우 name 속성은 'ebay_scrapper

py' 이 블록이 True를 반환하면 main () 함수는 다음과 같이됩니다 라는 그래서 잠시 동안 새로운 함수 main ()을 생성하고 있습니다 main function ()은 허브의 역할을 담당 할 것이고, 다른 것의 호출을 관리 할 것이다 우리는 긁힌 데이터를 수집 할 것입니다 여기에 '할 일'목록을 붙이고 싶습니다 다음 단계는 eBay의 페이지를 얻는 것입니다

그래서 우리는 이베이에 대한 요청 새로운 함수를 정의하고 이름을 지어 봅시다 URL 주소를 인수로 취하는 get_page () 그리고 get_page () 함수 우리가 설치 한 Requests 라이브러리로 요청할 것입니다 지금 가져 오기 가져 오기 요청 ' get_page () 함수 내부에서 나는 응답을 포함 할 새로운 변수 '응답'을 생성합니다

ebaycom 서버 '응답'변수는 다음과 같은 호출과 같습니다 요청 'get () 메소드

get () 메소드는 URL 변수를 논의 다음

main () 함수의 본문에서 'url'이라는 새 변수를 만듭니다 이 세부 정보 페이지의 주소와 같습니다 우리가 필요한 데이터를 긁어 내고 모든 것을 긁어내는 기능을 추가 할 것입니다

내부 페이지에 대한 링크 그래서 우리는 get_page ()에 전달한 상세한 페이지 URL을 가지고 있습니다 함수를 호출하고 get_page () 함수를 호출하여 URL에 전달합니다 변수 여기 get_page (url)

다음 우리는 여기에 요청을합니다 서버가 다르게 응답 할 수 있습니다

"404 찾을 수 없음"으로 응답 할 수 있습니다 요청한 리소스가 없거나 우리에게 액세스 및 403 오류 등으로 응답합니다 그리고 좋은 생각은 서버가 어떻게 반응하는지 확인하고 ok 속성과 응답의 status_code 속성 – 응답 변수는 Response 클래스의 인스턴스입니다

그래서 우리는 이것을 사용할 수 있습니다 그러한 검사를 수행 할 속성 예 : print (responseok) 우리는 True를 얻었습니다 그것은 이베이 서버가 우리에게 성공적으로 응답했음을 의미합니다 또한 우리는 status_code 속성을 사용할 수 있습니다 우리는 200을 얻었습니다

200은 서버가 응답했다는 것을 의미합니다 성공적으로 굉장해 이제는 새로운 IF-ELSE 조건을 생성합니다 '아니라면 responseok', 그 어떤 상태 코드를 수락 200

그래서 괜찮지 않다면 서버가 성공적으로 응답하면 메시지를 받고 싶습니다 동안 다음

우리는 서버의 응답을 받았고 이제는 HTML을 가져와야합니다get () 메소드로 전달 된 URL의 페이지 코드 검색을 효율적으로 수행 할 시간 HTML 코드를 파이썬 객체 트리

그리고 그것을하기 위해 우리는 Beautiful Soup 라이브러리를 사용할 것이고, 그래서 나는 BeautifulSoup 클래스를 가져와야합니다 ELSE 블록 안에 새로운 변수 '수프'가 생깁니다 '수프'는 BeautifulSoup 클래스

BeautifulSoup 클래스의 생성자는 적어도 두 개의 인수 – 첫 번째 인수는 페이지의 HTML 코드입니다 '응답'및 text 속성 두 번째 인자는 파서이다 HTML 코드를 파싱합니다 가장 효율적인 파서는 다음과 같습니다

LXML 파서 아름다운 스프 후드에서 사용하지만 두 번째 인수로 지정해야합니다 마지막으로 get_page () 함수는 BeautifulSoup 인스턴스, 즉 '스프'변수입니다 다음 단계는 다음과 같습니다 필요한 데이터를 긁어서 그래서 새로운 함수를 생성하고 있습니다 – get_detail_data ()

예를 들어 그것은 '수프'객체를 인수로 취합니다 이제는 분석 페이지 나는 제목, 가격 및 품목을 판매 할 것이다

시작하자 제목과 함께 그리고 내 목적은 현재이 요소들을 현재 페이지 제목이 필요합니다

마우스 오른쪽 버튼으로 클릭하고 '검사'또는 '요소를 점검하다' Inspector가 열리고 이제 볼 수 있음을 알 수 있습니다 제목은 'itemTitle'id (CSS)가있는 H1 HTML 태그입니다 그래서 나는하려고 애쓴다 이 특정 CSS 속성으로 H1 태그를 찾습니다

나는 그 '이드'를 의미합니다 그리고 여기 'soup'객체와 동일한 'h1'변수를 만듭니다 우리가 논증 한 것 그리고 이제는 find_all () 메서드를 사용해야합니다

그래서 나는 find_all () 메소드에 태그 이름 – h1, 쉼표와 그 식별 속성을 전달하면, 그것은 'id'속성입니다 우리는 할 수있다 그냥 복사하여 여기에 붙여 넣고 인쇄 해보 미안 해요 get_detailed_data () 함수를 호출하는 것을 잊었습니다 main () 함수는 여기에 있습니다 get_detail_data () 함수를 호출하고 인수로 나는 그것을 인수로 'url'변수와 함께 get_page () 함수 호출에 전달합니다

저장하고 실행하면 페이지에 H1 태그가 하나만 있음을 알 수 있습니다 따라서 여기에서 find_all () 메서드가 아닌 find () 메서드 만 사용할 수 있습니다find () 메소드의 문제점은 무엇입니까?

find () 메서드는 첫 번째 때때로 우리는 예기치 않은 결과를 얻을 수 있습니다 그래서 나는 단지 페이지에 둘 이상의 H1 태그가 포함되어 있는지 확인하십시오하지만 어쨌든 우리는 항상 코드를 수정하십시오 다시 인쇄 해 봅시다 이제 제목을 볼 수 있습니다

영어로 된 제품의 'a'태그의 'data-mtdes'속성 안에있는 경우, 그러나 H1 꼬리표의 원본이 아니다 그래서 검색 요청을 수정해야합니다 여기에 있습니다 다음 find () 메서드를 호출합니다

그리고 저는 여러분의 관심에 초점을 맞추고 싶습니다 expression은 BeautifulSoup 객체를 반환하므로 BeautifulSoup의 객체를 사용할 수 있습니다 방법 및 속성을 추가합니다 그리고 다음 find () 메소드를 호출합니다

그래서 여기 나는 'a'태그를 찾고 다시 저장하고 실행 해 봅시다 우리는 'a'태그를 얻었고 'data-mtdes'속성이 필요하다는 것을 알 수 있습니다 표제 그래서 'data-mtdes'속성의 값을 가져와야하지만 그렇게하는 방법은 무엇입니까? 이 표현식은 'a'태그를 반환합니다 BeautifulSoup입니다

개체도 그리고 'data-mtdes'의 가치를 얻으려면 attribute 사전에 get () 메소드를 호출하고 그 이름에 속성, 나는 'data-mtdes'입니다 저장하고 다시 실행하십시오 그리고 이제 우리는 영어로 제품의 제목 그러나 때때로 웹 사이트는 다른 얼핏보기에 같은 물건에 대한 레이아웃 예를 들어 제품에 할인 후 레이아웃 – 제목이나 가격 또는 다른 것이 가질 수있는 다른 것 CSS 클래스 및 다른 ID 그리고 아름다운 스프가 대상을 찾을 수 없습니다 우리의 검색 쿼리와 함께 예를 들어 다른 레이아웃을 가정 해 봅시다 제품이 다르다 여기에 뭔가를 추가하고 스크립트를 실행한다고 가정 해 보겠습니다

예외가 생겨 스크립트가 종료되었습니다 – 유형 없음 오류 그리고 처리 할 그런 예외들 파이썬은 TRY – EXCEPT 블럭들을 제공한다 그래서이 표현식을 TRY – EXCEPT 블록으로 감싸려고합니다 우리의 get_detail_data () 함수는이 검색어로 필요한 데이터를 찾으려고 노력할 것입니다

실패하면 'h1'을 빈 문자열로 사용하고 싶습니다 'title'으로 이름을 변경합시다 더 멀리 가자 이제 가격이 필요해 그래서 저는 새로운 TRY – EXCEPT 블록을 시작하고 있습니다 나의 행동을 되풀이한다

내가 생각하는 가격은 여기에있다 그래서 오른쪽 클릭 – 'Inspect' 그러면 우리는 할 수있다 가격이 'prcIsum'CSS id가있는 'span'태그인지 확인하십시오 그래서 그것을 발견하자

나는 그것의 'id'와 여기를 복사하고있다 'price'변수는 'soupfind ()'와 같다

나는 ID가 'prcIsum'과 동일한 'span'태그를 찾고 '가격'은 빈 문자열 그리고 '가격'을 인쇄하고 싶습니다 'span'태그가 있습니다

그리고 이제 우리는 가격이 'span'태그의 텍스트임을 알 수 있습니다 그래서 내가 가지고있는 텍스트를 얻으려면 수프 개체의 text 속성을 사용합니다

다시 부르 자 우린 그 끈을 잡았어 그리고 때로는 문자열에 공백이 있습니다 문자열 및 끝에, 그래서 strip () 메서드를 사용하여 공백을 제거하려면 이 일의 끝과 끝

또한 문자열을 공간 여기에 공간이 있고 문자열의 메서드로 할 수 있습니다 split () 그리고 공간을 구분 기호로 지정합니다 이제 나는 두 사람의 목록을 얻었다 요소 목록의 첫 번째 요소는 통화이고 두 번째 요소는 목록은 금액입니다

그래서 나는 그것을 풀고 싶다 말하자면 그것은 'p'가 될 것이다 변수 및 여기에 새 '통화'변수와 '가격'변수를 만듭니다 'p'객체와 같습니다 이 표현식은

에 의해 분할 된 문자열을 반환합니다 여기에 '통화'도 지정하고 싶습니다 이는 비어있는 것과 같습니다

끈 다시 한번 실행 해 봅시다 우리는 가격과 통화를 볼 수 있습니다

큰 확인 다음에는 판매 된 총 상품을 긁어서 다시 확인하겠습니다 나는 여기에 다른 레이아웃이 있다고 생각한다 'span' 그래서 우리는 판매 된 총 상품이 'a'태그의 텍스트라는 것을 알 수 있습니다 이 하나 'a'태그는 'soldwithfeedback'CSS 클래스가있는 'span'컨테이너의 하위 항목이며 여기에서 그러한 'span'은 없다

그래서 클래스 또는 ID를 지정해야합니다 필요한 결과를 찾기위한 다른 식별 속성 그래서이 클래스들은 다릅니다

하지만이 수업은 – 'vi-qtyS-hot-red'가 같기 때문에 우리는 이 클래스를 사용하여 'span'을 찾은 다음 'a'태그를 찾고 'a'태그의 텍스트를 가져옵니다 꼬리표 자 그럼 해보 죠 파이썬에서 '클래스'는 예약어이므로 여기서는 밑줄 기호를 사용해야합니다 그것을 밖으로 내다 다시 실행하자 우리는 우리의 '스팬'태그를 볼 수 있습니다

다음으로 'a'태그를 찾아야합니다 나는 find () 메소드의 호출을 추가하고 'a'를 인수로 전달합니다 그리고 우리는 소금 항목의 수량 이 단어는 '판매 된'을 의미합니다

ebaycom 모든 텍스트를 귀하의 언어 및 언어로 자동 번역합니다 귀하의 IP 주소에 따라 결정되므로 '판매 된'단어가 없지만 실제로는 그렇지 않습니다

문제 다음으로이 문자열을 공백으로 나누어야합니다 다시 나는 첫 번째 요소 만 원한다 그래서 나는 인덱스 0 및 다시 판매 된 상품의 총 수량을가집니다 큰! 그리고 지금 나는 모든 긁힌 데이터를 사전에 압축하려고합니다

나는 새로운 변수를 만들고있다 'title'키가있는 사전과 같은 데이터 이 'title'값 key는 'title'변수가됩니다

등등 그리고 우리 함수는 'data'사전을 반환 할 것입니다 다음 단계는 내부 페이지에 대한 모든 링크를 각 제품의 상세 페이지로 스크랩합니다

인덱스 페이지를 살펴 보겠습니다하지만 먼저 URL 주소 this one

그리고 우리는 URL 주소가 주요 부분과 다른 작은 부분으로 구성되어 있음을 알 수 있습니다 앰퍼샌드 기호로 구분됩니다 예를 들어 여기, 여기, 여기,이 부분 서버에 대한 get 요청의 매개 변수입니다 그리고 이것을 조작함으로써 매개 변수 우리는 필요한 출력을 얻을 수 있지만 지금 나는 URL을 간단하게하고 싶다

그래서 나는 검색 쿼리를 제외한 모든 매개 변수 삭제 – 'men 's watches' 나는 이것을 삭제하고 이것을 시도해 보자 그리고 그것은 효과가있다 – 우리는 같은 것을 얻었다

결과 큰! 이제 페이지를 페이지 매김 블록으로 스크롤하고 이것은 페이지 매김 블록이고 왼쪽에 페이지 번호 위로 마우스를 가져 가면 하단 모서리에서 URL이 한 부분 더 – 페이지 번호를 얻었음을 알 수 있습니다 'pgn = 6' 5 4 등등 따라서 다른 색인 페이지를 얻으려면 그냥 변경해야합니다 & _pgn = 2 두 번째를 볼 수 있습니다 3으로 변경하십시오 페이지 번호를 변경하여 다른 색인 페이지를 얻을 수 있습니다

나는 새 URL을 복사하여 여기에 붙여 넣으십시오 이제 나는 모든 것을 긁어 내고 싶다 현재 페이지에서만 제품의 세부 페이지로 연결됩니다 다른 페이지는 for 루프를 통해 긁어 낸다 – 단지 페이지 번호를 바꾸는 것과 마찬가지다 그리고 모든 링크를 얻으려면 새로운 함수를 만들어야합니다

get_index_data ()라고합시다 그것은 수프 객체를 인수로 취합니다 여기 – 블록을 제외하고 시도해보십시오

이제 색인 페이지로 이동하여 마우스 오른쪽 버튼으로 클릭하고 검사합니다 과 우리는 클래스 's-item__link'와 함께 'a'태그가 필요하다는 것을 알 수 있습니다 클래스를 복사하십시오 'a'태그를 사용하면 같은 클래스의 페이지에서 'a'태그를 모두 찾아야합니다

그래서 여기 '링크'변수가 수프 개체와 같습니다

이 하나 find_all () 메서드를 호출하여 클래스의 모든 'a'태그를 다 쳤습니다 난 그냥 CSS 클래스 인 's-item__link'를 붙여 넣으십시오 EXCEPT 블록에서 : links = [] find_all () 메서드는 목록을 반환합니다

그것을 인쇄 해 봅시다 그리고 나는 여기에서 get_index_data () 함수를 호출해야합니다 나는 목록을 가지고 있고 이것은 'a'태그 객체들의 목록이지만, 나는 전체 'a' 태그를 모든 속성과 함께 사용하려면 'href'속성 만 필요합니다

예를 들어,이 중 하나 그래서 나는 새로운 변수를 만들고 있습니다 그것이 'urls'와 같다고 가정 해 봅시다 빈 목록

목록을 작성하기 위해 목록 이해력을 사용하고 싶습니다 내부 페이지의 URL 주소 그것을하기 위해서는 각 get () 메소드를 사용해야한다 요소를 'links'목록의 'href'속성으로 가져옵니다 그럼 item

get ( 'href')라고 해봅시다 '링크'목록의 각 '항목'에 대한 인수로 사용됩니다 그것을 인쇄 해 봅시다 그리고 우리는 링크 (URL)를 얻었고 다음 단계는 URL 목록을 FO 루프와 각 반복마다 get_detailed_data () 함수를 호출해야합니다 각 URL -리스트의 요소 따라서 main () 함수에서 URL 목록이 필요합니다

각 제품의 주소 그래서 저는 새로운 변수를 만듭니다 get_index_data () 함수의 호출과 같은 'products'이 목록은 다음과 같습니다 링크와 지금 내가 루프를 시작 해요 그리고 여기에 내가있어 새 변수 'data'를 만든 다음 get_detail_data () 함수를 호출합니다

'url'변수와 함께 get_page () 함수를 전달하면 this this 로컬 'url' 변하기 쉬운 좋아, '링크'변수로 이름을 바꾸자 그러면 우리는 사전 스크립트를 실행 해 봅시다

오류가 발생했습니다 – "NoneType 객체가 반복 가능하지 않습니다" 문제는 여기 – 'urls'변수를 반환하는 것을 잊었습니다 다시 시작합시다

좋아요 우리는 사전을 가지고 있습니다 – 가격, 통화, 총 판매 가격 그레이트! 그리고 여기 우리는 '총 판매 된'열쇠에서이 이상한 상징을 볼 수 있습니다 그것은 깨지지 않습니다 공간 그래서 우리는 그것을 제거 할 수 있습니다

나는 replace () 메서드를 호출하고 있습니다 그것은 문자열이고, 첫번째 인자는 ' xa0' (깨지지 않는 공간) 그리고 그 대신에 내가 원하는 것은

빈 문자열 승인 다음 단계는 이 사전을 CSV 파일 그래서 나는 새로운 함수 write_csv ()를 만들고 싶다 '데이터'사전을 인수로 사용합니다 CSV를 사용하려면 그것을 가져 오십시오

write_csv () 함수 안에서 WITH 컨텍스트 관리자를 사용하여 처리하고 있습니다 파일을 만든 다음 open () 함수를 호출하고 open () 함수에 전달합니다 함수는 파일 이름을 'outputcsv'라고합시다 그리고 open () 함수 이 파일 이름으로 파일을 찾으면 열립니다 그렇지 않으면 open () 함수는 'outputcsv'파일 이름으로 새 파일을 만듭니다

그리고 나는 또한하고 싶다 두 번째 인수를 지정하십시오 – 'a'문자가됩니다 'A'는 '추가'를 의미하므로 새로운 데이터는 'outputcsv'파일 끝에 추가됩니다 그리고 이것을 위해 열렸습니다

쓰기 파일 개체 'csvfile'변수에 'as' 예어 다음 나는 CSV와 같은 새로운 변수 '작가'를 만들고있다

모듈을 호출하고 writer () 메서드를 호출하면 'csvfile'객체가 논쟁 그리고 마침내 나는 '데이터'사전의 내용을 쓰고 싶다

CSV 파일 이 하나 그래서 작가의 메서드를 호출합니다 writerow () 메서드와 writerow () 메서드는 단 하나의 인수 만 사용하므로 생성합니다 새로운 이용 가능

그것이 '행' 그것은 목록과 같습니다 그리고 여기에 나는 '데이터'의 열쇠를 열거하고있다 사전을 CSV 파일에 넣고 싶습니다

그래서 '데이터'사전에 '제목', '가격', '통화', '총 판매 된'키가 있습니다 그런 다음 'row'변수를 전달합니다 write_row () 함수에 추가합니다 또한 나는에 전달하는 것이 유용 할 것이라고 생각합니다 write_csv () 함수는 URL 주소입니다

그래서 write_csv () 호출을 추가하고 있습니다 함수 여기에

write_csv () 함수를 추가하고 첫 번째 인수로 'data'를 추가한다고 가정 해 보겠습니다 '링크'변수는 두 번째 변수입니다 그래서 여기에 두 번째 매개 변수 인 'link'또는 'url' 'url'이라고 가정 해 봅시다 그리고 여기 에서 결국 나는 'url'을 지정하고있다

그럼 스크립트를 실행 해 봅시다 우리는 'outputcsv'를 얻었고 Libre 사무실이나 Microsoft Office에서 살펴 보겠습니다 승인 우리의 데이터가 있습니다

우리는 여기에 몇몇 빈 세포를 볼 수 있습니다 그래서 우리는이 URL을 복사하여 그것을 검사 할 수 있습니다 다시 경감 님과 할인이 있고 ID가 다릅니다 좋습니다

어떻게이 문제를 해결할 수 있습니까? 우리는 할 수있다 여기에 중첩 된 try / except 블록을 만들고 여기서 우리는 'span'태그를 찾으려고 할 수 있습니다 다른 ID 여기서 '통화'정의를 이동하십시오 기본 try / except 블록과 동일한 레벨입니다

이제 스크립트를 삭제하고 스크립트를 실행 해 봅시다 다시 LibreOffice로 열어 보겠습니다 이제 우리는 우리가 빈 셀을 채웠지 만 데이터가 정규화되지 않았습니다 달러 기호지만, 어쩌면 다음에 또한 빈 제목이 있습니다 그래서 때때로 title은 다른 CSS 속성을가집니다 그러나 그것은 중요하지 않습니다

이 열을 '총 판매량'별로 정렬 해 봅시다 그것은 D 열입니다 데이터 메뉴 – 정렬 D 열, 내림차순 승인 그리고 우리는 대부분의 수요와 가장 성공적인 제품은이 시계입니다 거의 두 명이야

여기 달러, 예를 들어, 가격이 거의 $ 85 인 1000 개의 판매 상품 죄송합니다 이 URL을 복사하여 붙여 넣으십시오 $ 85 및 1000 판매 그리고 이건 22,000 달러를 팔고 1 달러 반 가격 오, 맙소사

언뜻보기에는 가장 수요가 적은 제품입니다 그리고 만약 당신은 비디오를 좋아해요 '좋아요'를 클릭하고 구독하십시오 고맙습니다

AI vs Machine Learning vs Deep Learning | Machine Learning Training with Python | Edureka

안녕하세요 Edureka의 Atul입니다

토론 주제에 오신 것을 환영합니다 인공 지능 vs 기계 학습 vs 깊은 학습 이것들은 많이 혼란스러워하는 용어입니다 당신도 그들 중 하나라면, 내가 너를 위해 그것을 해결하자 그럼 인공 지능은 더 넓은 우산입니다

기계 학습 그리고 깊은 학습은 다이어그램에서 볼 수 있습니다 깊은 학습조차도 기계 학습의 부분 집합이라고 그래서 너는 말할 수있다 그 세 명 모두 기계 학습을하는 인공 지능 깊은 학습은 서로의 부분 집합입니다 그래서 계속 나아가서 이해합시다 서로 얼마나 다른지

그럼 인공 지능으로 시작합시다 용어 인공 지능 1956 년에 처음으로 만들어졌다 개념은 꽤 오래되었고, 그러나 최근에 그 인기를 얻고있다 그러나 왜 잘, 그 이유는 우리가 아주 적은 양의 데이터를 가지고 있기 때문입니다 우리가 가진 데이터는 정확한 결과를 예측하기에는 충분하지 않았습니다

하지만 지금 엄청난 금액 증가가 있습니다 데이터 통계의 제안 2020 년까지 누적 된 데이터 량이 증가 할 것이라고 대략 44 제타 바이트의 스튜 (약 44 제타 바이트) 44 조 GB 데이터의 엄청난 양과 함께 자, 우리는 더 진보 된 알고리즘을 가지고 있습니다 하이 엔드 컴퓨팅 파워 및 스토리지 그 결과 많은 양의 데이터를 처리 할 수 ​​있습니다

예상된다 엔터프라이즈의 70 %가 ai를 구현할 것입니다 향후 12 개월 동안 2016 년에는 40 %, 2017 년에는 51 % 증가했다 AI가 무엇을 잘 이해하고 있는지, 기술 일뿐입니다 복제로 기계가 인간처럼 행동 할 수있게 해줍니다

인공 지능과의 행동 및 성향은 가능하다 기계가 경험에서 배우기 기계는 단지 응답 기반입니다 인간과 같은 작업을 수행하여 새로운 입력에 인공 지능은 달성하도록 훈련받을 수 있습니다

많은 양의 데이터를 처리하여 특정 작업 수행 그들 안에있는 패턴을 알아내는 것 당신은 고려할 수 있습니다 인공 지능을 만드는 것은 건물과 같습니다 교회는 최초의 교회가 세대를 거쳐 완성되었습니다 그래서 대부분의 노동자들 그 일을하고있는 사람들은 최종 결과를 보지 못했습니다

그것에 공예 건물 벽돌에 자부심을 가지고 돌을 치는 그것은 위대한 구조에 놓이게 될 것입니다 AI 연구자들처럼, 우리는 겸손한 벽돌 제조사로 생각해야합니다 그의 직업은 공부하는 것이다 구성 요소를 작성하는 방법 예제 파트는 플래너입니다 또는 학습 알고리즘 또는 무엇이든 받아들이십시오

언젠가는 누군가와 어딘가가 통합 될 것입니다 지능 시스템에 몇 가지 예를 들어 우리 일상에서 인공 지능의 우리의 애플 시리즈 그냥 컴퓨터 테슬라 자기 – 운전 자동차를 재생 이보다 더 많은 예제는 깊은 학습을 기반으로합니다 자연 언어 처리 글쎄, 이것은 인공 지능과 그것이 과대 광고를 얻는 방법에 관한 것이 었습니다 그럼 계속 전진해라

기계 학습에 대해 논의하고 그것이 무엇인지 알아 봅시다 그리고 화이트 프로가 소개되었습니다 그럼 기계 학습이 왔습니다 80 년대 후반과 90 년대 초에 존재하게되었고, 그러나 사람들과 관련된 이슈는 무엇 이었습니까? 기계 학습이 생겨나게 만들었습니까? 통계학 분야에서 하나씩 차례로 토론합시다 문제는 얼마나 복잡한 복잡한 모델을 효과적으로 훈련 시키는가? 컴퓨터 과학 및 인공 지능 분야

문제는 AI 시스템의보다 강력한 버전을 교육하는 방법이었습니다 동안 연구자들이 직면 한 신경 과학 문제의 뇌의 수술 모델을 설계하는 방법 그래서 이것들은 몇 가지 이슈들이다 그 영향력이 가장 커서 존재를 이끌어 낸 기계 학습의 이제이 기계 학습은 그 초점을 바꿨습니다 상징적 접근으로부터

그것은 인공 지능으로부터 물려 받았고 움직였다 방법과 모델을 향해 그것은 통계와 확률 이론에서 빌렸다 그래서 진행하고 봅시다 기계 학습이란 정확히 무엇입니까? 그럼 기계 학습은 AI의 하위 집합입니다 어떤 컴퓨터가 행동 할 것인가? 특정 작업을 수행하기 위해 데이터 기반 의사 결정을 내릴 수 있습니다

이 프로그램은 알고리즘이 시간이 지남에 따라 배우고 향상시킬 수있는 새로운 데이터에 노출되었을 때 기계 학습의 예를 보도록하겠습니다 시스템을 만들고 싶다고합시다 그 측면에 기반한 사람의 예상 체중을 알려줍니다 가장 먼저 데이터를 수집합니다 거기에 보자

이제 각 지점의 데이터가 어떻게 보이는지 그래프의 첫 번째 데이터 점을 나타냅니다 우리는 간단한 선을 그릴 수 있습니다 높이를 기준으로 체중을 예측합니다 예를 들어, 간단한 선 W는 대기 x kgs에서 100을 뺀 값과 같습니다 가장자리는 숨 깁니다

이 선은 우리가 예측을하는 데 도움이 될 수 있습니다 우리의 주요 목표는 차이를 줄이는 것입니다 추정 된 값과 실제 값 사이의 값 그래서 그것을 성취하기 위해서 우리는 직선을 그려 봅니다 이 모든 다른 점들에 꼭 맞는 오류를 최소화하십시오

따라서 우리의 주요 목표는 오류를 최소화하는 것입니다 가능한 한 작게 만들어 오류를 줄입니다 또는 실제 값에서의 차이 예상 값은 성능을 향상시킵니다 더 많은 데이터 포인트에서 모델의 우리는 더 나은 것을 수집합니다 우리의 모델은 우리가 될 것입니다

변수를 추가하여 모델을 개선 할 수도 있습니다 그 (것)들을위한 다른 생산 라인을 창조하십시오 일단 라인이 생성됩니다 그래서 다음에 우리가 새로운 데이터를 먹이면, 예를 들어 모델에 대한 사람의 높이, 그것은 당신을위한 자료를 쉽게 예측할 것이며 당신에게 말할 것입니다 예상되는 체중은 무엇 일 수 있습니다 네가 분명히 이해했으면 좋겠어

기계 학습 그럼 계속 전진해라 깊은 학습에 대해 배우자 이제 깊은 학습이란 무엇입니까? 로켓 엔진으로 깊은 학습 모델을 고려할 수 있습니다 그 연료는 엄청난 양의 데이터입니다

우리는 이러한 알고리즘에 개념을 제공합니다 깊은 학습은 새로운 것이 아니며, 하지만 최근에는 증가하고 깊은 학습은 더 주목을 받고있다 이 필드는 특정 종류의 기계 학습입니다 그것은 뇌 세포의 기능을 뉴런이라고 부릅니다 인공 신경 네트워크 (artificial neural network)의 개념을 이끌어 냈다

간단하게 모든 인공 뉴런 사이의 데이터 연결 데이터 패턴에 따라 더 많은 뉴런을 조정합니다 크기에 추가됩니다 데이터의 크기가 커서 자동으로 기능합니다 여러 수준의 추상화에서 학습 이로써 시스템 허용 의존하지 않고 복잡한 함수 매핑을 배우기 특정 알고리즘에

있잖아, 아무도 실제로 무슨 일이 일어나는지 알지 못한다 신경 네트워크 내부에서 왜 그렇게 잘 작동하는지, 그래서 현재는 블랙 박스라고 부를 수 있습니다 깊은 학습의 예를 들어 보겠습니다 더 나은 방법으로 그것을 이해하십시오 간단한 예부터 시작하여 설명해 드리겠습니다

상황이 개념적 수준에서 어떻게 발생하는지 우리가 시도하고 이해하자 다른 모양의 사각형을 어떻게 인식합니까? 가장 먼저 할 일은 그림과 연관된 네 줄이 있는지 여부 아니면 단순한 개념이 아닌가? 예인 경우 추가 확인 그들이 연결되어 있고 몇 년 후에 다시 폐쇄되면 드디어 확인해 그것이 수직이고 모든면이 동일하든간에, 성취한다면 정확하다 예, 사각형입니다

글쎄, 개념의 중첩 된 계층 구조 일 뿐이다 우리가 여기서 한 것은 복잡한 작업을 수행했습니다 사각형 식별하기 이 사건은 단순한 작업으로 나뉘어져 있습니다 이제이 깊은 학습은 똑같은 일을합니다 그러나 더 큰 규모에서, 다음을 인식하는 기계의 예를 들어 봅시다

기계의 작업이 인식하는 동물 주어진 이미지가 고양이인지 개인지 여부 개념을 사용하여 동일한 문제를 해결하도록 요청받은 경우 어떻게해야합니까? 우리가 먼저 할 일을 배우는 기계 우리는 다음과 같은 기능을 정의 할 것입니다 짐승이 수염을 가지고 있는지 수표에 수표가 있는지 확인하십시오 동물이 귀를 가리킨다면 또는 그 꼬리가 직선인지 짧게 꼬인지를 결정할 수있다 우리는 얼굴의 특징을 정의하고 시스템은 어떤 기능이 더 중요한지 식별합니다

특정 동물을 분류 할 때 깊은 학습에 관해서는 앞서 한 걸음 씩 나아 간다 깊은 학습은 자동으로 기능을 찾습니다 분류 비교에서 가장 중요한 것 기계 학습으로 여기서 우리는 수동으로 그 기능을 수동으로 제공해야했습니다 네가 이해 한 것 같아 인공 지능은 더 큰 그림과 기계입니다

깊은 학습 또는 별개의 문제입니다 그럼 계속 나아가 자 기계 학습에 대한 토론을 집중 그리고 그 차이를 이해하는 가장 쉬운 방법을 깊이 배우라 기계 학습과 깊은 학습 사이를 아는 것입니다 깊은 학습은 기계 학습입니다

그것은 기계 학습의 다음 진화입니다 몇 가지 중요한 매개 변수를 취해 봅시다 기계 학습과 심화 학습을 비교하십시오 그래서 데이터 의존성부터 시작해서, 깊은 학습의 가장 중요한 차이 기계 학습은 볼륨으로서의 성능입니다 아래 그래프에서 데이터가 증가합니다 당신은 데이터의 크기가 작은 깊은 학습 알고리즘은 잘 수행하지 않습니다, 그러나 왜 잘, 이것은 깊은 학습 알고리즘 요구 때문에 대용량의 데이터를 완벽하게 이해하기 반면에 기계 학습 알고리즘은 쉽게 작은 데이터 세트로 잘 작동합니다

다음은 하드웨어 종속성에 대한 심층 학습입니다 하이 엔드 기기에 크게 의존하고 있습니다 동안 기계 학습 알고리즘은 낮은 시스템과 기계에서도 작동 할 수 있습니다 이것은 요구 사항 깊은 학습 알고리즘의 포함 gpus 필수적인 부분 인 깊은 학습 알고리즘을 작동시키는 데 gpus가 필요합니다 그들이하는 것처럼 다량의 행렬 곱셈 연산, 및 이러한 작업 GPU를 사용하여 효율적으로 최적화 할 수 있습니다

이 목적으로 지어 졌기 때문입니다 세 번째 매개 변수 만 기능 엔지니어링 잘 기능 엔지니어링 될 것입니다 복잡성을 줄이기 위해 도메인 지식을 넣는 것 데이터의 패턴을 학습 알고리즘에보다 잘 보이게 할 수 있습니다 이 과정은 시간면에서 어렵고 비용이 많이 듭니다 기계 학습의 경우 전문 지식을 갖추고 있습니다 대부분의 기능은 전문가가 식별해야합니다

도메인별로 손으로 코딩 및 데이터 유형 예를 들어, 기능 픽셀 값 모양 텍스처 위치 방향 일 수 있음 또는 아무것도 괜찮아요 대부분의 기계 성능 학습 알고리즘은 의존한다 기능이 얼마나 정확하게 식별되는지 추출 반면에 깊은 학습 알고리즘의 경우 그것은 데이터에서 높은 수준의 기능을 배우려고합니다 이것은 깊은 학습에서 매우 특징적인 부분입니다 어떤 방향으로 나아가는가? 깊은 기계 학습을 학습하는 전통적인 기계는 작업을 줄인다 모든 문제에 대한 새로운 피쳐 추출기 개발 CN의 경우와 같습니다

n 알고리즘을 사용하여 먼저 저수준 기능을 배우려고합니다 가장자리와 선과 같은 이미지의 그런 다음 사람들의 얼굴 부분으로 진행합니다 마지막으로 고수준 표현으로 얼굴의 나는 상황이 당신에게 더 명확 해지기를 바랍니다 이제 다음 매개 변수를 살펴 보겠습니다

그래서 우리의 다음 매개 변수는 문제 해결 접근법입니다 우리가 해결할 때 전통적인 기계 학습 알고리즘을 사용하는 문제 일반적으로 추천된다 우리가 먼저 문제를 해결 한 다른 하위 부품으로 개별적으로 해결 원하는 결과를 얻으려면 마침내 결합하십시오 이것은 기계 학습 알고리즘이 Lm을 처리하는 방법입니다 반면에 딥 학습 알고리즘 문제를 끝에서 끝까지 해결합니다

이것을 가정 해 봅시다 여러 개체 검색 작업이 있습니다 그리고 당신의 임무는 신원을 확인하는 것입니다 물체가 무엇이고 물체가 이미지의 어디에 있는지 그래서 보자

너는 어떻게 태클 할거야? 기계 학습 개념을 이용한이 문제 기계 학습으로 시작하는 깊은 학습 일반적인 기계 학습 접근법에서 당신은 먼저 나눌 것입니다 2 단계 첫 번째 물체 감지로 문제 그리고 나서 물체 인식 가장 먼저, 당신은 바운딩 박스 탐지 알고리즘을 사용할 것입니다 예를 들어 이미지를 스캔하기 위해 잘라낸 잡기 가능한 모든 대상을 찾으십시오 이제 일단 객체들 당신은 객체 인식 알고리즘을 사용하여 인식됩니다 관련 객체를 인식 할 수있는 돼지와 svm을 좋아합니다

자, 마침내, 결과를 결합하면 식별 할 수 있습니다 객체 란 무엇인가? 다른 쪽의 이미지에있는 곳 깊은 학습 접근 방식으로 끝에서 끝까지 프로세스를 수행합니다 예를 들어 유로 넷에서 이는 깊은 학습 알고리즘의 한 유형입니다 당신은 이미지를 전달하고 그것을 줄 것입니다 객체의 이름과 함께 위치

자, 움직여 보자 우리의 다섯 번째 비교 매개 변수에 실행 시간 보통 깊은 학습 알고리즘은 오랜 시간이 걸린다 이것을 훈련시키는 것은 왜냐하면 너무 깊은 학습 알고리즘의 많은 매개 변수 그 훈련은 보통 때보 다 더 오랜 시간이 걸린다 심지어 2 주 이상 지속될 수도 있습니다

당신이 처음부터 완전히 훈련하는 경우에, 기계 학습의 경우 상대적으로 몇 주에서 몇 몇 예술에 이르기까지 훈련하는 데 훨씬 적은 시간 이제 실행 시간이 완전히 뒤 바뀌 었습니다 테스트 중 데이터 테스트를 할 때 딥 학습 알고리즘은 실행 시간이 훨씬 적습니다 반면 당신이 KNN 알고리즘과 비교한다면, 기계의 한 종류 인 학습 알고리즘 테스트 시간은 크기로 증가합니다 마지막으로 데이터가 증가합니다

그러나 적어도 우리는 해석 가능성을 가지고 있지 않다 기계 학습의 비교를위한 요소 이 사실을 실행하는 것이 왜 주된 이유입니까? 깊은 학습은 여전히 ​​10 번 생각된다 누구든지 업계에서 사용하기 전에 가정 해 봅시다 우리는 깊은 학습을 통해 자동 득점 2 에세이 성능 득점력이 아주 뛰어나다

인간의 성과에 가깝다 하지만 문제가 있습니다 그것은 백인이 그 점수를 주었다는 것을 밝히지 않습니다 참으로 수학적으로 알아낼 수있다

깊은 신경 네트워크의 어떤 노드가 활성화되었는지 그러나 우리는 모른다 뉴런이 모델링 한 것으로 추정되는 것 우리가 집단적으로하고있는 이러한 뉴런 계층은 무엇입니까? 그래서 해석 할 수 있다면 알고리즘을 학습하는 다른 기계의 결과, 같은 의사 결정 나무는 우리에게 무효 선택의 선명한 규칙을 준다 및 물결 무늬가있는 선택했다 따라서 추론을 해석하는 것이 특히 쉽습니다 그러므로 의사 결정 트리와 같은 알고리즘 선형 또는 물류 회귀는 주로 업계에서 해석 가능성을 위해 사용됩니다

이 세션을 끝내기 전에 내가 물건을 요약하자 당신을 위해 기계 학습 알고리즘을 사용하여 데이터를 구문 분석 데이터로부터 배울 수있다 잘 배운 내용을 토대로 정보에 입각 한 결정을 내릴 수 있습니다 이제이 깊은 학습 구조 알고리즘 인공 신경 네트워크를 만드는 레이어 배울 수있는 마침내 지능형 의사 결정을 내릴 수 있습니다

깊은 학습은 기계 학습의 하위 분야입니다 두 가지 모두 넓은 범주에 속합니다 인공 지능 깊은 학습의 일반적이다 가장 인간과 비슷한 것 인공 지능 음,이게 전부 였어 의심이 있으시면 오늘의 토론을 위해 의견 섹션에 쿼리를 자유롭게 추가하십시오

고맙습니다 이 비디오를 듣고 즐거웠 으면 좋겠습니다 그것을 좋아할 정도로 친절하세요 의심과 검색어에 대해 의견을 말할 수 있습니다 우리는 그들에게 대답 할 것이다

가장 빠른 시일 내에 우리의 재생 목록에서 더 많은 동영상을 찾으십시오 Edureka 채널을 구독하여 자세히 알아보십시오 행복한 학습

Secretary Pompeo Meets with Czech Foreign Minister Tomas Petricek

(카메라 셔터) 장관 POMPEO : 환영합니다 체코 수석 외교관 Tomáš Petříček : 고맙습니다

비서실 장 : 오늘 와줘서 고맙습니다 (알아들을 수 없는) (카메라 셔터) 장관 POMPEO : 다시 보니 반갑습니다 다들 감사 해요 체코 수석 외교관 Tomáš Petříček : 고맙습니다

Network Automation with Python – Automate IP Address configuration Part 2

이 멋진 토폴로지에서 IP 주소를 구성 해 봅시다 (OSPF 구성 스크립트에이 IP 주소를 사용합니다) "mgmt"IP 주소 만 구성되고 이웃은 CDP를 통해 검색됩니다 (이전 비디오에서와 같이) Devices

conf에는 관리 장치 목록과 관련 mgmt ip 주소가 들어 있습니다 group_addressesconf에는 그룹 접 두부가 들어 있습니다 그룹 간 연결의 경우 두 그룹이 알파벳순으로 연결됩니다 스크립트는 이제 cdp 네이버 테이블을 읽고 그에 따라 인터페이스에 ip 주소를 구성합니다! 유효성 검사 단계! 각 링크에 대해 스위치가 로컬 인터페이스에서 원격지로 ping 한 다음 성공률을 분석합니다 (연결을 고려하기 위해 적어도 하나의 핑이 성공해야 함) 좋아, 몇 가지 수동 검사 / 테스트를 해보 죠

모든 것이 예상대로 작동합니다! 자, 방금 구성한 IP 주소를 제거하고 싶다고합시다 구성된 모든 IP 주소를 제거하는 스크립트를 사용하는 것이 좋습니다! (주 : mgmt ip 주소는 제거되지 않음) 스크립트가 모든 것을 제대로했는지 확인해 봅시다

그리고 여기에도 모든 것이 예상대로입니다! mgmt 인터페이스에만 ip 주소가 있고, 다른 인터페이스는 ip없이 시작됩니다 (시작과 같습니다) 또 다른 시간 / 에너지 소비 작업 자동화! 기억하십시오 : 잘 정의 된 작업을 두 번 반복한다면, 자동화 할 가치가 있는지 생각해보십시오!

What Should I Program with Python?

파이썬으로 무엇을 프로그래밍해야합니까? 나는 사람들이 원하는 것이 필요하다고 들었다 프로그래밍에 들어가기

파이썬은 초보자들에게 좋은 언어로 간주됩니다 그것은 모든 프로그래머들이 배워야 할 언어에 대한 몇 가지 목록에 있습니다 HTML 하지만 파이썬에는 성가신 구문이 있습니다 Lisp 팬은 타원에 중독되어 있지만 Objective C 프로그래머는 어려운 복잡성에 직면 해 있습니다

우아한 하드웨어 작업에도 불구하고 모든 언어에는 단점이 있습니다 프로그래머들은 실수로 실수로 발을 쏘고 실수를 저지르기 쉽다고 말한다 우연한 복잡성을 통해 파이썬은 많은 정적 인 정적 유형 시스템을 가지고 있습니다

격렬하게 제한된 것을 찾아라 엄격한 정적 유형이있는 경우 변수를 사용하여 실수를 저 지르지 않습니다 그것은 열심히 들린다 파이썬에는 훌륭한 라이브러리와 많은 오픈 소스 코드가 있습니다 수많은 온라인 리소스 참조 또는 지원

파이썬이 유연하다고 생각하십니까? 파이썬은 캐주얼 스크립팅, 프로토 타입 및 웹 프로젝트에도 사용할 수 있습니다 Python을 사용하여 명령 줄 앱을 작성할 수 있습니다 파이썬은 한 응용 프로그램을 다른 응용 프로그램에 임베드 할 수있는 몇 안되는 언어 중 하나입니다 자바 앱을 다른 언어로도 임베드 할 수 있습니다 Java는 프로그래머에게 인기가있을 수 있지만 해커에게 인기가 있습니다

모든 보안 허점 파이썬에는 그 약점이 없습니다 파이썬 개발자가 정기적으로 불타 다니는 이야기를 들었습니다 페이스 북, 오라클 및 실리콘 밸리 기업이 본질적으로 통과하는 것보다 더 나쁠 수는 없습니다 30 살이 넘은 사람들의 이력서는 당신이 너무 오래되었다고 생각하기 때문에

Lisp, Fortran 또는 Erlang을 알기에 나이가 들었던 것처럼 느끼는 것보다 더 나쁠 수 없습니다 내가 파이썬을 사용해야한다고 생각하니? HTML이나 CSS보다 훨씬 많은 용도가 있으며, 객관적인 C

Web GUI for Apache logs parser with Flask framework | Projects

좋은 하루 오늘 나는 너를 위해 또 다른 프로젝트를 가지고있다 그것은 아파치 웹 인터페이스입니다 우리가 Flask 프레임 워크로 빌드 할 로그 파서입니다

구문 분석기 설명 이전 버전과의 차이점이 있으므로이 버전을 사용해보십시오 좋은 생각 파서는 다음과 같이 작동합니다 로그 파일을 선택하고 제출 단추를 클릭하십시오 파서는 각 IP 주소의 요청을 계산하고 여기에 결과를 표시합니다

첫 번째 블록과 두 번째 블록에서이 라인을 htaccess 공격자를 차단하는 파일 하지만이 튜토리얼의 주요 아이디어는 모든 파이썬 스크립트를위한 웹 인터페이스를 만드는 법 관심이 있다면 계속 지켜봐 프로젝트를위한 폴더를 만듭니다

다음 터미널을 여는 중입니다 virtualenv virtualenv를 사용하여 가상 환경 만들기 –python = python3 나는 특정 Python 버전과 venv를 지정하고있다

이것은 가상의 이름이다 환경 그리고 내 가상 환경을 활성화하고 그것을해야합니다 '원본'명령 사용 내 가상 환경이 활성화되어 볼 수 있습니다 커맨드 라인의 왼쪽에 작은 힌트

다음 나는 프로젝트의 새 폴더 그럼 'cd'명령을 사용하여 디렉토리를 변경하고 app 디렉토리에서 변경합니다 Atom 편집기를 시작하면 원하는 다른 편집기를 시작할 수 있습니다

Atom을 시작하면 또는 Visual Studio 코드를 활성화 된 가상 환경으로 콘솔에서 내가 한 것처럼 이 편집자는 귀하가 가상 환경에 설치되어있는 라이브러리 만 사용합니다 현재 가상 환경 이제 준비된 로그 파일을 붙여 넣으려고합니다 그만큼 Dropbox에 대한 링크는 동영상 설명에 표시됩니다

우리가 한 준비 그리고 로그 파서를 작성한 후 시작합니다 우리는 Flask 프레임 워크를 사용하여 웹 인터페이스를 생성 할 것입니다 나는 새로운 파일 말하자면 그것은 'parser_app

py'가 될 것이고 이제 엔트리 포인트를 만들자 – 및 '주 차단'인 경우 이 블록은 파일 (parser_apppy)이 실행되었는지 확인합니다 콘솔에서 직접 또는하지 콘솔에서 파일이 실행중인 경우 __name__ 속성은 '__main__'과 같지만 파일을 다른 이름으로 가져올 경우 그런 다음 스크립트의 __name__ 속성에이 파일의 이름이 포함됩니다 case __name__ 속성은 'parser_app

py'와 동일합니다 따라서이 IF 조건은 False를 반환하고 main () 함수는 호출되지 않습니다 그리고 그 이유는 main 블록이 모든 파이썬 프로그램의 진입 점인 이유입니다 다음 나는 main () 함수, 'pass'를 잠시 동안 사용하면 이제 일반 표현 모듈 import re 다음 로그 파일을 열고 그 파일을 읽어야한다

함유량 우리가 파일 객체로 작업 할 때 올바른 사용법은 컨텍스트 관리자 WITH, 그래서 여기 'with'

그런 다음 open () 함수를 호출하고 로그의 파일 이름 (따옴표 안에)을 전달합니다 그리고 나서 나는 새 변수에 파일을 열었습니다 'f'라고 해봅시다

그리고이 표현의 결과는 열린 파일 객체 이제 나는 그 내용을 읽고 그것을 사용하고 싶습니다read () 메소드 나는 새로운 변수 '데이터'를 만들고있다

'f'read ()와 같습니다 우리는 우리의 데이터 변수를 확인할 수 있습니다 – 그것을 인쇄하고 나는 스크립트 다음 우리는 로그 파일 전체에서 모든 IP 주소를 찾아야하며 마지막으로 모든 IP 주소를 검색하는 것처럼 검색 패턴을 사용합니다 이러한 검색 패턴은 정규 표현식입니다 그리고 우리가 검색 패턴 findall () 메서드를 사용하여 채워지는 목록을 가져옵니다

검색 결과가 아니라 새로운 변수를 만들어 보겠습니다 '패턴' 빈 문자열과 같습니다 잠시 동안

그리고 우리가 정규직과 일할 때 내가 사용하고자하는 검증 서비스를 사용하는 것이 좋습니다 'regex101com' 여기서 파이썬을 선택하고 테스트 문자열을 입력 해 봅시다 여기에 텍스트가 필요합니다

일부 IP 주소 여기에 텍스트를 추가하고 싶습니다 모든 텍스트 이제 검색이 필요합니다 패턴을 사용하여 대량의 텍스트 안에있는 IP 주소 만 찾습니다 각 IP는 네 부분은 점으로 구분되며 각 부분은 1 ~ 3 자리로 구성 될 수 있습니다 그래서 나는 ' d'로 시작하는데, 0에서 9 사이의 숫자와 'regex101' 테스트 텍스트의 모든 자릿수를 강조 표시 했으므로 각 강조 표시된 숫자는 독립적 인 검색 결과입니다

findall () 메서드를 사용하면 바로이 숫자 목록을 얻을 수 있습니다 이런 식으로, 예를 들어 1, 2, 7, 0 등 단지 숫자지만 IP는 아닙니다 그래서 저는 계속 진행할 것입니다 그리고 점을 지정하고 여기에 점을 넣으면 'regex101' 점 외에 강조 표시된 밑줄 기호는 여기에

느낌표는 여기에 맨 위 줄은 점과 숫자 1을 제외합니다 정규 표현식에 점으로 표시되는 언어는 모든 기호 any를 의미합니다

그리고 우리의 정규 직원 표현은 이제 우리가 두 개의 상징을 찾고 있음을 의미합니다 첫 번째 상징 는 숫자이고 두 번째 기호는 임의의 기호입니다 그래서 'regex101'은 여기에서 하나의 점을 제외하고 여기에 한 자리 숫자 1, 두 개 기호를 찾았으므로 하나가 아닙니다 좋아, 우리는하지 않는다 여기에 기호가 필요하다

정확하게 도트 기호가 필요하고 정확히 도트 기호 저는 점을 벗어나 쌍을 이루는 백 슬래시와 점을 사용했습니다 그래서 여기에 백 슬래시를 삽입합니다 그리고 이제 우리는 'regex101' 첫 번째 기호가 두 기호의 모든 일치를 강조 표시했습니다 두 번째 것은 점입니다 그러나 IP 주소의 각 부분은 1 ~ 3 자리 숫자를 사용하고 숫자의 범위를 지정하려면 사용해야합니다

중괄호 여기 그리고 내부 범위를 지정하고 있습니다 : 1, 3 이제 우리는 이 패턴은 각 IP 주소의 어느 부분에서나 작동한다는 것을 알 수 있지만 한 부분으로, 전체 IP가 필요합니다 전체 IP를 얻으려면이 문제를 극복해야합니다 표현 4 번 끝 점과 끝 백 슬래시를 삭제하십시오

그리고 그게 전부입니다 우리의 정규 표현식은 준비가되어 있고 여기에서 우리의 '패턴'으로 복사하고 있습니다 변하기 쉬운 그리고 문자열의 시작 부분에서 'r'을 지정하고 있습니다 원시 문자열 표기법을 의미하는 문자이며 이제는 'ips'변수를 만듭니다 're'모듈의

findall () 메소드 호출과 같습니다 첫 번째 논증 findall () 메소드는 우리가 찾고있는 것을 필요로한다 우리는 찾고 있습니다 정규 표현식과 일치하는 텍스트, 즉 'pattern'변수입니다 두 번째 인수는 우리가 찾고있는 곳입니다

우리는 '데이터'변수에서 IP를 찾고 있습니다 확인을 위해 그것을 인쇄 해 봅시다 알았어

우리는 모든 지적 재산권을 얻었다 다음 단계는 요청 수량을 계산하는 것입니다 각 IP에서 가장 편리하고 좋은 방법은 카운터 ()를 사용하는 것입니다 클래스 '컬렉션'모듈에서 그래서 그것을 가져와야합니다

여기 '호출'과 동일한 '결과'변수가 생성됩니다 Counter () 클래스의 'ips_list'클래스를 생성하고 카운터의 생성자에 전달하는 중입니다 모든 IP 주소 카운터의 작업에 대한 자세한 설명 클래스가 마지막 비디오에있었습니다 – 'Apache는 Python으로 구문 분석을 로그합니다'링크는 여기 오른쪽 구석과 비디오에 대한 설명

지금 나는 단지 Counter () 클래스는 키가 우리의 IP 인 사전을 반환한다는 것을 상기시킵니다 키의 값은 카운트입니다 그리고 Counter () 클래스에는 특별한 방법 most_common () 나는 그것을 호출한다

– most_common () 인수 가장 일반적인 요소 또는 항목의 수량 우리의 경우에는 가장 일반적인 IP 주소 그래서 most_common () 메소드로 전달할 것입니다

number let 's 10 그리고 우리는 'results'변수를 출력 할 수 있습니다 그리고 지금 가능한 한 각 튜플의 첫 번째 요소가 IP 인 튜플의 목록을 봅니다 각 튜플의 두 번째 요소는 카운트입니다

이 목록을 반복 할 수 있습니다 FOR 루프의 튜플 그래서 나는 새로운 FOR 루프를 시작하고있다 그리고 FOR 반복의 각 반복에 파이썬 현재 튜플을 키와 값 변수에 푸십시오 의 첫 번째 요소 튜플은 키 변수로 전달되고 두 번째 튜플은 값 변수로 전달됩니다 및 내부에있는 FOR 루프, 본문

나는 print () 함수를 호출하고 전달 'f'문자열 표기법이있는 문자열을 입력하십시오 여기에 키를 붙이고 싶습니다 여기에 값이 있습니다

키 변수와 값 변수의 값은 자동으로 키와 문자열의 값 필드로 대체됩니다 그래서 나는 그것을 구하고 노력하고있다 '포장을 푸는 데 많은 가치가있다

' 미안 해요 '결과', 물론

'결과'변수 파서를 수행했으며, 파서는 다음과 같습니다 준비가되었지만, 원한다면이 코드를 리펙토링 할 수 있습니다

그리고 지금 저는 웹을 만들고 싶습니다 이 파서의 인터페이스 이제 터미널을 열고 있습니다 나는 플라스크를 설치하고있다 끝난 그렇다면이 함수를 주석 처리하고 플라스크를 가져와야합니다

에서 그런 다음 Flask 클래스의 인스턴스를 만들어야합니다 Flask () 클래스와 동일한 새로운 변수 'app'을 만들고 있는데, __name__ 속성을 인수로 사용합니다

그것은 중요한 논쟁입니다 현재 파일 ( 'parser_apppy'로의)과 경로에서 file Flask는 다른 경로를 의존성과 같은 경로를 결정합니다 CSS 파일, 템플릿 폴더 등이있는 폴더 그런 다음 초기화 중 블록

run () 메서드를 호출하고 'debug = True'로 전달합니다 debug가 True이면 Flask는 매번 앱을 자동으로 다시 시작합니다 프로젝트 파일을 변경합니다 이제 Flask 앱을 ​​시작할 수 있습니다 '이미 사용중인 주소'

죄송합니다 그리고 지금 우리는 dev 서버가에서 시작되었음을 볼 수 있습니다 localhost 및 5000 포트 번호

그래서 저는 그것을 열어서 서버를 볼 수 있습니다 404 – '찾을 수 없음'오류를 반환합니다 그것은 서버가 우리에게 응답했지만 아직 아무것도하지 않았기 때문에 404 오류가 발생했습니다 요청을 처리 할 뷰 함수 (핸들러 함수)를 만들어 보겠습니다 우리 앱의 루트 URL

그래서 저는 플라스크의 route () 메소드를 호출 할 것입니다 예 그리고 내가 지나가고있는 논증 그것에 '/'를 입력하십시오 즉, 루트 URL 주소를 의미합니다

다음 색인 ()을 정의하고 있습니다 함수는 전통적인 문자열 'Hello World'를 반환합니다

페이지를 저장하고 새로 고침하십시오 'Hello world'문자열이 있습니다 알았어 뭐 route () 데코레이터는 무엇입니까? route () 데코레이터는 특정보기를 바인딩합니다

함수 (핸들러 함수)를 전달 된 특정 URL 주소로 논증 후드 아래에서 Flask는 다음과 비슷한 사전을 만듭니다 이 키가 '/ blog'와 같은 일부 URL 인 사전 및 값 이 키에 대한 요청을 처리하는 함수입니다 그리고 이제 우리는 이 페이지에서 파일을 선택하기위한 HTML 양식과 파서를 실행하십시오

또한 결과를 보여주는 블록을 만들어야합니다 다음 것 이런 식으로 문자열을 사용하는 것은 사용자와 정보를 보여주는 매우 불편한 방법이며, 일반적으로 이러한 작업에는 HTML 템플리트가 사용됩니다

우리와 함께 HTML 템플릿을 사용하려면 Flask 응용 프로그램 render_template () 함수를 가져와야합니다 이제 index () 함수는 render_template () 함수 그리고 첫 번째 인수는 HTML 템플릿의 이름이며, 이름입니다 HTML 파일의 'base

html'이됩니다 모든 템플릿은 'templates'폴더에 저장됩니다 기본적으로 그래서 우리는 'templates'폴더를 만들어야합니다 그리고 지금 나는 'base

html'파일을 만들어야합니다 Emmet이 구조를 만드는 데 도움이 될 것입니다 나는 넣는다 여기서 느낌표를 누르고 '탭'을 누르십시오 그런 다음 제목을 변경하고 싶습니다

문서 – 'Apache logs parser'가됩니다 저장하고 페이지를 다시 시작할 수 있습니다 아직 아무것도 아니지만 페이지 제목이 있습니다 'Apache log parser'입니다 그래서 우리는 할 수있다 'base

html'이 렌더링되었는지 확인하십시오 일반적으로 'basehtml'이 가장 많이 사용됩니다 일반적인 웹 사이트의 모든 요소를 ​​포함하는 추상 템플릿 사이트의 모든 페이지에 대해 메인 메뉴, 웹 사이트 이름, 꼬리말, 링크 등 JavaScript 파일, CSS 파일 링크 등 각 페이지의 고유 정보 이 특수 블록 ({% %}), 'block'키워드, 블록의 이름 예를 들어 '내용'은이 블록을 닫아야합니다

'엔드 블록'키보드는 여기에 있습니다 블록에 여기에 삽입해야하는 콘텐츠는 다음과 같습니다 다른 템플릿에서는 'content'라는 이름을 가진 블록을 사용합니다 그래서 나는 'indexhtml'이라는 이름으로 새 HTML 템플릿을 만들려고합니다

그리고 지금 나는 가지고있다 indexhtml 파일이 'basehtml'템플릿을 확장하도록 지정합니다 키워드를 확장하고 따옴표 사이에 확장 템플릿의 이름을 지정해야합니다

그것은있을 것이다 'basehtml' 이제는 같은 이름의 콘텐츠 블록을 만들고 있습니다 'base

html'템플릿에 사용되었습니다 그것은 '콘텐츠'블록이었습니다 그리고 내부 블록에있어 'Apache 로그 파서'텍스트가있는 h1 태그를 만듭니다 우리는 지금 그것을 구할 수 있습니다

render_template () 함수 호출에서 렌더링 된 템플릿 이름을 변경해야합니다 'indexhtml' 페이지를 저장하고 새로 고침하십시오 그리고 우리는 여기서 우리가 볼 수 있습니다 'indexhtml'파일의 h1 헤더 및 'Apache 로그 파서'- 'basehtml'에 지정된 제목 다른 템플릿으로 템플릿을 확장하는 프로세스가 호출됩니다

Flask와 Django의 템플릿 상속 이제 스타일링에 부트 스트랩을 사용하고 싶습니다 그래서 나는 getbootstrapcom에 가서이 링크를 복사해서 붙여 넣습니다 'base

html'파일은 여기에 있습니다 페이지를 새로 고치면 스타일이 적용된 것을 볼 수 있습니다 좋아, 다음 단계는 로그 파일을 선택하고 파서를 색인에 사용하기위한 양식을 만드는 것 전망 문서 부트 스트랩 페이지로 가서 찾고 있습니다 구성 요소 탭 및 여기 양식이 필요합니다

그리고 지금 나는 파일 선택 양식을 찾고 있는데 이 하나 사본 여기에 붙이고 있습니다 여기 있습니다

레이블 태그를 삭제하고 ID가 필요하지 않습니다 이제는 몇 가지 속성을 폼의 첫 번째 특성은 HTTP 메서드입니다 우리는 로그 파일을 서버에 게시하고 있으므로 POST 메서드이므로 <form> 태그를 추가하고 있습니다 POST와 동일한 'method'속성 (따옴표, 싱글 또는 더블) 추가해야하는 다음 특성은 처리 할 함수의 경로입니다 양식에 의해 제출 된 데이터

그리고 우리는 그것을위한 index () 뷰 함수를 가지고 있습니다 그래서 저는 폼에 '액션'속성을 추가하고 있습니다 다음 표현 : 작은 따옴표 또는 큰 따옴표 사이 나는 이중 곱슬을 사용합니다 괄호 이중 중괄호는 내가 어떤 값을 HTML 템플릿, 내부 및 이중 중괄호 url_for () 함수를 처리 할 함수의 이름을 전달합니다

POST 요청, 제출 된 파일 그것은 index () 함수가 될 것이다 이중 중괄호 HTML 파일에 값을 대체하는 것을 의미합니다 나는 너의주의를 집중하고 싶다 여기서 'index'는 index () 함수의 이름이지만 그 이름은 아닙니다

indexhtml 템플릿 함수 이름입니다 그리고 url_for () 함수는 여기에 index () 뷰 함수에 대한 경로와 내가 가진 마지막 속성을 생성한다 추가 할 속성은 양식에서 파일을 허용합니다 명시 적으로 인코딩 유형을 결정해야하므로 'multipart / form-data'와 동일한 'enctype'속성을 추가합니다

그리고 이제 <input> 태그에 속성을 하나 더 추가해야합니다 나는 'name'속성, that은 'log_file'이라고합시다

'name'속성은 무엇입니까? Flask에는 특별한 객체 'request'가 있습니다 특정 요청에 대한 정보 또한 요청 객체는 파일을 보관합니다 사용자가 Google 애플리케이션으로 전송합니다 그리고 '요청'객체 내부에서 이러한 파일 특수 사전에 '파일'이라는 이름으로 저장됩니다

그리고 <input> 태그의 'name'속성은 'files'사전의 키입니다 특정 파일이 저장됩니다 원하는 이름을 여기에 지정할 수 있습니다 다음 것 우리 양식에 단추를 추가하고 싶습니다 'submit'형식의 <Button> 및 클래스 = 'btn btn-primary btn-sm'btn-primary는 색상이고

btn-sm은 크기입니다 기본 그것은 그가 같은 색이다 저장하고 새로 고침하십시오 나는 'submit'텍스트를 잊어 버렸다 다시 새로 고침하십시오

승인 이제 index () 뷰 함수의 본문을 작성해야합니다 우리의 양식은 보내는 중입니다 POST 요청을 통해 응용 프로그램 파일에 저장됩니다 그래서 나는 index () 함수는 POST 요청을 받아들입니다

route () 데코레이터에 전달 중입니다 두 번째 인자 -리스트와 같은 메소드 의 첫 번째 요소 목록은 'POST'가되고 두 ​​번째 것은 'GET'이됩니다 다음

사용자가 그것이 'request'객체의 'files'속성에 저장되었던 파일이고 이제는 'request'객체에서 파일의 내용을 가져옵니다 그리고 시작하기 전에 나는 필요합니다 요청 개체를 가져옵니다

그런 다음 내부 확인해야 할 index () 함수 – 우리가 가지고있는 HTTP 요청의 유형 application : GET 요청 또는 POST 요청 HTTP의 유형에 의존하기 때문에 우리의 신청서가 다르게 행동 할 것을 요청하십시오 들어오는 GET 요청으로 우리의 애플 리케이션은 단순히 양식을 렌더링해야합니다 들어오는 POST 요청으로 앱은 여러 가지 다른 일을해야합니다 그래서 나는 새로운 IF 조건을 시작하고있다

if requestmethod == 'POST' 잠시 동안 전달하십시오

그리고 '그 외' else는 GET 요청임을 나타냅니다 이 줄을 여기에 붙여 넣으십시오 그리고 지금은 보내진 파일에 도달해야합니다

전에 내가 말했듯이 파일은 '요청'객체의 '파일'속성에 저장됩니다 나는 새로운 것을 창조하고있다 변수 말하자면 'log', 이는 요청과 같습니다 파일

'files' 사전이기 때문에 가치를 얻으려면 키를 전달해야합니다 의 열쇠 sended 파일이있는 'files'사전은 'name'속성의 값입니다 <input> 태그

'log_file' 여기에 복사해서 여기 붙여 넣습니다 나는 파일을 가지고 있고 나는 그것을 읽을 필요가있다

그래서 나는 read ()를 부르고 있습니다 그리고 지금 나는 마주 쳤습니다 중요한 세부 사항 – 플라스크는 파일을 유니 코드 문자열로 읽지 않습니다 바이트 시퀀스와 같은 파일을 읽습니다

그래서 바이트 데이터 타입을 캐릭터 라인 데이터 형 그리고 나는 그것을 두 가지 방법으로 할 수 있습니다 첫번째 다음과 같이 새로운 변수 'txt'는 str () 함수를 호출하는 것과 같습니다 첫 번째 인수는 'log'변수이고, 두 번째 – 'utf8' 인코딩 유형 그것은 첫 번째 방법입니다

그리고 두 번째는 txt = str (logencode ( 'utf-8'))입니다 txt = str (logencode ( 'utf-8')) 다음 '로그'데이터를 처리해야합니다 그리고 그것을하기 위해 나는 우리가 전에 작성한 파서 함수를 사용하려고합니다 이거 그래서 새 함수를 만드는 중 parse ()는 'data'를 인수로 사용하고 여기에이 줄을 붙여 넣고, 주석을 제거하고, 올바른 설명을 붙입니다

FOR 루프를 삭제하고 있습니다 parse () 함수는 'results'변수 this를 반환합니다

그리고 지금은 로그의 데이터를 parse () 함수로 보내고 싶습니다 그 결과를 되찾아 라 그래서 내부 색인 ()보기 기능 나는 '결과' 변수는 다음과 같습니다 parse () 함수를 호출하고 전달합니다 그것에 'txt'변수

그런 다음 index () 뷰에서 데이터를 전송해야합니다 함수를 템플릿에 적용합니다 그렇게하는 방법? 템플릿에 데이터를 보내려면 전달해야합니다 render_template () 함수에 새로운 인자를 단지 일러스트레이션을 위해서 나는 '이름'이라는 변수를 만들어

'산타 클로스'라고하고, render_template () 함수의 새로운 인수는 말하자면 'from_index_view'는 'name'변수와 같습니다 그리고 인수 (나는 'from_index_view'를 의미합니다)는 indexhtml 템플릿에서 사용됩니다 그래서 indexhtml에 이중 곱슬이있는 새 명령문 블록을 지정합니다

대괄호로 묶어서 render_template () 함수의 인수 이름을 붙여 넣으십시오 즉 'from_index_view'입니다 index () 뷰를 확인해 보겠습니다 지정했습니다 POST 요청 처리 브랜치 안에있는 변수 이름을 GET 브랜치로 옮긴다 'else'블록 페이지를 저장하고 새로 고침하십시오 이제 우리는 '산타 클로스'를 볼 수 있습니다

from_index_view '변수는 index () 함수에 정의되어 있습니다 그래서 render_template () 함수에 'results'변수를 전달하는 것과 같은 방법입니다 나는 새로운 인수 'ips' 'result'변수와 같다고 가정 해 보겠습니다 변수의 이름을 'ips'로 지정하십시오 저장하고 새로 고침하십시오 파일 선택, 열기, 제출 그리고 우리는 할 수 있습니다 우리의 'ips'목록이 문자열로 렌더링되었지만 결과를 분리하려고합니다 각 IP를 단락 태그 (<p>)로 래핑하려면 그것을하기 위해 나는 FOR 루프로 'ips'리스트를 반복해야한다 'index

html'템플릿에 직접 입력하십시오 그리고 그러한 목적을 위해 Flask는 'for'라는 이름의 특수 블록 그리고 내부의 템플릿에는 루프가 있어야합니다 일반 파이썬 스크립트에서와 같은 방식으로 정의됩니다 그리고 나는 또한 생각 나게하고 싶다

당신은 우리의 'ips'리스트가 튜플의리스트라는 것을 알았습니다 그래서 나는 새로운 것을 창조하고있다 'for'블록에 대한 표현입니다 여기 나는 'endfor'로 그것을 닫고있다 for 루프의 각 반복에서 'ip'변수에는 특정 튜플의 첫 번째 요소와 'counts'변수에는 튜플의 두 번째 요소

그리고 FOR 블록 안에는 단락 태그와 여기에 'ip'변수의 값을 붙이고 싶습니다 여기에 'counts'변수의 값을 붙여 넣으십시오 페이지를 새로 고칩니다 Ok, 모든 작품 마우스 오른쪽 버튼을 클릭하고 'Inspect'하면 각 IP 주소에 대해 <p> 태그를 볼 수 있습니다

다음 단계는 하고 싶다 공격자를 금지하는

htaccess 파일의 텍스트를 준비합니다 index () 함수 그리고 여기서 저는 새로운 변수 '금지'를 만들고 있습니다 이는 빈 목록과 같습니다 그런 다음 새로운 FOR 루프를 시작합니다

이제 각 IP에서 요청 수량을 확인하고 싶습니다 임계 값을 설정하십시오 IP 주소를 금지하려는 경우 초과 요청 수 500 개 요청 또는 100 개 요청 문제는 없지만 비디오 용도로는 100 건의 요청을 사용합니다 따라서 'value'변수가 100보다 크면 '금지'목록은 사전에 추가됩니다

어디에 첫 번째 키는 'ip'이고 'ip'키의 값은 'key'변수가됩니다 그리고 두번째 키는 'value'변수의 값으로 'counts'가 될 것입니다 과 이제 'ips'변수는 '금지'목록과 동일합니다 그리고 이제 indexhtml 템플릿 내에서 FOR 루프를 수정해야합니다

지금 'ips'변수는 사전 목록입니다 따라서 FOR 반복의 각 반복에서 'ip'변수에는 사전이 포함됩니다 그래서 'ip'를 'item'으로 바꾸고 여기에 item [ 'ip']이고 여기에 item [ 'counts']가 있어야합니다 그것이 어떻게 작동하는지 확인합시다 모든 것이 우리가 기대했던대로 작동합니다 우리는 6 가지 결과를 얻었습니다 100 개 이상의 요청 좋아, 금지 제안을 제외한 모든 작업

Let 's 다음 내용으로 새 FOR 루프를 만듭니다 'Deny from'과 내가 필요합니다 여기에 IP 만 있습니다

페이지를 새로 고칩니다 우리는 백 엔드가 잘 작동하는 것을 볼 수 있습니다 그리고 지금 나는 UI를 더 멋지게 만들고 싶습니다 그리고 처음에 나는 페이지, 그럼 각 정보 블록 사이에 더 많은 공간을 추가하고 싶습니다 (헤더 양식,이 블록 및이 블록)을 사용하고 두 버튼을 하나로 묶고 싶습니다 열

시작하자 센터에서 컨텐츠를 정렬하려면 'basehtml'을 열고 랩핑합니다

태그가있는 블록 내용 Ctrl + Alt + W를 누르면 div가됩니다container 클래스와 row 클래스를 가진 내부 div 기본적인 부트 스트랩 레이아웃입니다 다음으로 container div에 mt-5를 추가합니다

클래스는 margin-top 5를 의미하고 mb-5는 margin-bottom 5를 의미합니다 그리고 이렇게 생겼어 우리는 위와 아래에서 여백을 가지고 있습니다 좋아, 다음

row 클래스 4 추가 클래스를 사용하여 div에 추가하려고합니다 첫 번째는

col-6 클래스는 div가 6 개의 Bootstrap 열을 사용한다는 것을 의미합니다 두 번째는 mx-auto 클래스입니다 즉, row 클래스를 가진 div는 화면 중심으로 정렬됩니다

이제 모든 콘텐츠를 센터에 정당화하고 싶습니다row 클래스와 함께 div 안에 있고 flex-column 클래스와 align-items-center

페이지를 새로 고칩니다 다음으로 양식보기를 수정하려고합니다 indexhtml 파일과 <form> 태그 클래스 속성을 추가하고 싶습니다mt-5 (margin-top 5) 클래스 추가 다음 form-group 클래스 내의 내부 div

d-flex 클래스를 추가하고 있습니다 정당한 내용의 수업justify-content-between은 첫 번째 항목과 마지막 항목 (입력 및 버튼)이 해당 항목의 가장자리로 밀려납니다 상위 컨테이너 – divform-group this 그리고 그들 사이의 모든 자유 공간 다른 항목간에 균등하게 배분됩니다 두 항목 만 있으므로 그냥 가장자리로 밀었습니다 페이지를 새로 고칩니다 그리고 우리는 한 줄을 가지고 있습니다

Ok, next 이제 각 FOR 루프를 div와 함께 mt-5로 감싸려고합니다 이건

그리고 이거 페이지를 새로 고칩니다 승인 다시 확인하고 다시 파일을 보자 제출 단추를 누르십시오

승인 BadRequestKeyError가 있습니다 파일이 없으므로 파일을 추가해야합니다 <input>은 'required'속성에 태그를 붙입니다 페이지를 다시 새로 고침하십시오

'파일을 선택하십시오'라는 메시지가 나타납니다 지금은 여기까지입니다 지켜봐 줘서 고마워 동영상을 좋아한다면 다음과 같이 클릭하십시오

구독하다