글쟁이, 코딩한다

1217 / K_digital 9일차 / 파이썬(크롤링) 본문

나는 코딩도 한다/TIL

1217 / K_digital 9일차 / 파이썬(크롤링)

Algori 2020. 12. 17. 21:05

0.

  변함없이 온라인 강의.

  올해, 절반은 노트북 앞에 앉아있었다. 안 그래도 휜 척추를 잘 관리할 필요가 있겠다. 눈이든 배든 어깨든 시린 발가락이든 어디든. 알 수 없는 것들 앞에서 모른채 앉아있으려니, 이런 생각들만 자꾸 했다. 

  

웹 크롤링

웹 스크래핑(web scraping) :

웹페이지에서 원하는 자료를 긁어오는 것 -> 국내에서는 웹 크롤링이라고 더 많이 불린다 

 

HTML : HyperText Markup Language  

  웹 스크래핑을 위해서는 HTML의 기본 구조를 알아야 한다.
  HTML은 웹사이트 기본 세팅의 <head>, 세부 내용을 채우는 <body>로 이뤄진다.

 몇 가지 HTML 용어들

< > == html 태그, elements   

       #<>로 열고 </ >로 닫는다.


 Tag's name : 

  <div> 하나의 상자. 여러 div(divine)를 겹쳐 존재한다.  </div> 
  <h1> h1~h6 / 제목 </h1> 
  <p> 단락, 문단 paragraph </p>

  <span>new</span> 
  <a href='https://www.google.com'> 링크(a) 하이퍼링크(href) / 구글로 이동  </a>
  <img src=''> 이미지 태그 </img>

  <ul>unordered-list : 순서가 정해지지 않은 리스트 <ol> orderd-list : 순서를 정한 리스트 
  <li> list item </li> </ul>

<!-- 이 부분은 주석 --> 

 Tag's Attribute(속성) : 

   Class, Id, ... 
    #여러 태그는 같은 Class(학급)을 가질 수 있다 #반면 ID는 태그 하나만(고유값) 

 

웹 스크래핑 진행 순서 

 1) URL 분석

    #크롬 개발자 도구(Ctrl + Shift + I, F12) 

 

 2) URL 구성

 3) HTTP Response 얻기(urlopen)   문자열로 만든 url을 넣고, urlopen 함수로 서버에 요청을 보낸다.

    #HTTP를 Request(요청하면) -> response(응답한다.) #서버 요청 시 성공은 200, 문제가 있으면 404(Not Found), 500(서버 미응답) 

 4) HTML source 얻기(BeautifulSoup)  서버가 보내는 response를 beautifulsoup가 html 뭉치로 뱉어낸다.

 

 5) HTML 태그 꺼내기(.find())

    #find 함수 사용 후 : find(Tag)와 find_all(ResultSet)의 타입형을 잘 확인. Tag에서만 쓸 수 있는 함수들 .get_text() / .strip() / .attrs 

 5) 태그에서 텍스트, 어트리뷰트 값 꺼내기

    #with문이나 open() 로 파일을 열고 f.write()로 크롤링한 내용을 저장하자. 
    #예외처리 : try와 except  #일단 해봐(try). 예외적인 경우에(문제가 있으면, except) 넘어가라(pass, 혹은 다른 작업을 수행). 

 

※ 크롤링한 데이터를 기반 삼아 상업적인 용도로 사용하면, 저작권법에 걸릴 수 있다. => 위험!
굉장히 빠른 요청이, 한 번에, 아주 많이 도착하면, 서버가 공격이라고 인식할 수 있다. 하나의 IP에서 다수의 request가 오면 IP가 막힐 수도 있음. => 이럴 때는 기다리는 수밖에.

 

오늘의 TML

 

Website / App의 영역


 Front-end : 웹사이트 모습을 만들어낸다 
  -화면 골격 : HTML (.html) 
  -화면 디자인 : CSS (.css) 
  -화면 작동 : Javascript(.js) /HTML과 CSS로도 가능하다. 
 Back-end 
  -작동 구조 : Business Logic : Javascript / Java / PHP / Python / Ruby 

 

오늘의 공부 생각

 

 결국 함수를 많이 외우는 것이 큰 의미가 있을까? 과정을 명확히 이해하자.

 원하는 바를 명확히 인지할 것. 코딩 전 이해할 수 없는 것들, 불분명한 것들을 남기지 말 것. (구글에, 강사님에, 동료들에, 아니 누구한테든) 잘 물어볼 것.

  다양한 데이터들이 새롭게 바뀔 수 있는 모습들에 대해 고민할 것.

Comments