카테고리 없음

Python_SkillUP 3주차 (파이썬 연구수업)

INVENT_GUY 2019. 10. 2. 15:38

파이썬 스킬업 3주차, 웹크롤링 첫주이다.

여기서 크롤링이란? : 우리가 흔히 부르는 웹 크롤러 크롤링의 정식명칭은 'Web Scraping' 이다. 외국 자료에서는 'Web Crawling' 보다는 'Web Scraping' 이라는 용어를 자주 사용한다. 웹 크롤링이란 컴퓨터 소프트웨어 기술로 웹 사이트들에서 원하는 정보를 추출하는 것을 의미한다. (예 : 네이버영화 댓글 수집등.)

 

일단 웹크롤링을 하기 전 웹의 기본인 웹 구성요소에 대해서 알아보자. 

먼저 아래 페이지로 들어간다.

https://codepen.io/pen/

 

Create a New Pen

...

codepen.io

codepen.io

들어가면 위와 같은 화면을 볼수있다.

위의 HTML, CSS, JS(javascript)는 웹의 주된 구성요소이다.

HTML은 웹 개발을 위한 xml의 한 종류이자 웹의 뼈대이고, 기본적으로 웹페이지의 내부요소이다.

CSS라는 것은 웹페이지를 꾸며주는데 (보기좋게) HTML로도 꾸밀수 있지만, 대부분의 웹에서는 이것을 사용한다.

 javascript(자바스크립트)는 웹에서 키보드, 마우스등 이벤트들을 담당한다.

 

HTML 형식 :

    <태그명> </태그명>

    <태그명> text속성 </태그명> : 클래스 존재 안함

    <태그명 속성 = "속성값"> text속성 </태그명> : 클래스 존재

    <!-- 주석 -->

 

아래와 같은 코드를 코드펜의 html에 입력해보자.

<button>bro u fished LOL </button>

<button>bro u fished XD </button>

<button>bro u fished XP </button>

<button class = "b1">버튼1 </button>

<button class = "b1">버튼2 </button>

<button class = "b1">버튼3 </button>

<p>레이블1<p>

<p>레이블2<p>

<p class = 'b1'>레이블3<p>

 

그러면 밑에 버튼과 레이블이 생성되는것을 확인할수있다.

(여기서는 CSS와 javascript는 다루지 않겠다.)

입력

(이런 화면)

 

자, 이제 오늘의 주된 내용인 웹크롤링 예제를 한 번 실행해보자.

 

오늘의 처음이자 마지막 예제 : 

naver_main.py

 

# naver.com 이미지에 있는 링크만 가져오기 nono japan
# pip3 install requests
# pip3 install bs4
import requests, bs4
from bs4 import BeautifulSoup
from urllib.request import urlretrieve # 다운로드 할때 사용(미디어 파일등)

url = 'https://www.naver.com'
response = requests.get(url) # 웹 요청 (get) 하고 응답데이터 지정
# print(response)
# print(response.status_code)
# print(response.url)
# print(response.text)

html  =  response.text
soup = BeautifulSoup(html, 'html.parser') # (분석할 글자, 분석할 일꾼) # 파싱(parsing) : 분석 - 정리 (방식이기도 함)

# 찾기 함수들
# 요소 방법(html 접근방식) : find, findAll
# CSS 방식 : select_one, select
imgs = soup.select('img')
for img in imgs :
    # print(img['src'])
    t_url = img['src'].split('/')[-1]
    print(t_url)
    # try :
    urlretrieve(img['src'], './imgs/' + t_url)
    # except Exception as e:
    #     print(e)

# 실시간 검색
# words = soup.select('span.ah_k')
# result_keyword = []
# for word in words :
#     # print(word.text)
#     result_keyword.append(word.text)
# print(list(set(result_keyword)))

( 대부분 주석임ㅋㅋ (물론 다른 코드들이었다ㅠ))

 

이 코드를 실행하기 위해선 beautifulSoup4 (bs4)와 requests, urllib이 필요하다.

(파이썬 메뉴얼(?)에서는 다른 개발자들이 만든 requests를 사용하라고 되어있지만 다운로드를 위해서는 urllib의 requests가 필요하다.)

 

이 코드에 대해서 설명하자면, 먼저 네이버창을 get(다운로드)하고 이것의 text를 구한다. (여기서 'html.parser'는  일꾼을 얘기.)

여기서 soup가 네이버 홈페이지의 이미지 형식(이미지)을 찾아서 다운로드 한다. (주석도 참고)

_____________________________________________________________________________________

 

이것으로 오늘의 포스팅을 마친다.

참고 :

    파이참 refactor - rename으로 변수 이름 통째로 바꿀수 있음.

    set() : 집합 자료형 , 겹치는건 지워버림 (dict 자료형 반환) ( 단점 : index 섞임ㅠ)