반응형

응용】 파이썬 웹 크롤링#1 (Web Crawling)

 

크롤링이란,  인터넷에서 특정검색(어)로 검색하여 (자료를) 긁어 모우는 행위를 일컫는다. 이를 파이썬코드나 시스템을 이용해서 반자동으로 긁어 모으게 되는데, 

이를 웹스크래핑이라고도 부른다.   긁어 내는데 사용하는 도구인 아래 스크래퍼를 의미하는 용어가 사용 된 것이다. 

 

 

1. 네이버 검색창에서 '파이썬'으로 검색한 결과(블로그 항목만-클릭)을 띄워보면,  아래처럼 나타난다.

 

2. 위, 네이버 검색결과를 아래파이썬 코드를 이용해서 뽑아낼 수 있다. 

이를 위해 사용되는 요소가  BeautifulSoup(뷰티플 스웁) 이다.

 

import urllib.request

from bs4 import BeautifulSoup

 

url = 'https://search.naver.com/search.naver?where=post&sm=tab_jum&query=%ED%8C%8C%EC%9D%B4%EC%8D%AC'

html = urllib.request.urlopen(url).read()

soup = BeautifulSoup(html, 'html.parser')

print(soup)


하지만, 아래와 같은 엄청나게 많은 잡다한 형태로 출력이 된다. 

 

3.  현재 상태에서는 잡다한 웹페이지 내용까지 모두 코딩 결과창에 출력된다.  따라서,

아래는 웹(크롬) 브라우저 창에서 F12를 눌러 검색페이지별 제목('title')과, 링크 주소('href') 부분의 특정요소만 걸러서 나오도록 조치한 방법이다.   

검색 결과창의 웹 브라우저에서 F12 를 누르면 아래처럼 웹페이지의 분석도구를 사용할 수 있다. 

그래서 Html의 기본만 알아도 쉽게 파악 할 수 있으나,  전혀 모르더라도,  쉬운 것 몇 가지만 기억해두면 된다. 

예를 들어, 네이버 블로그에서는 HTML 문서에서 제목(타이틀) 앞에는 'sb_blog_title' , 그리고 'title' 글자가 항상 들어가 있다는 것과, 

링크 주소 앞에는 'href=...' 라는 형태로 되어 있다는 정도만 알아도 검색을 더 깔끔하게 할 수 있다.

F12 키를 눌러 웹 상에서의 분석도구를 불러낸 화면

 

 

import urllib.request

from bs4 import BeautifulSoup

 

url = 'https://search.naver.com/search.naver?where=post&sm=tab_jum&query=%ED%8C%8C%EC%9D%B4%EC%8D%AC'

html = urllib.request.urlopen(url).read()

soup = BeautifulSoup(html, 'html.parser')

title = soup.find_all(class_='sh_blog_title')

print(soup)

 

그래도 여전히 잡다하게 출력되어 보기 어렵다.

 

4. 네이버에서 검색창에 파이썬으로 검색하고, 블로그 항목(파이썬)의 Url 링크들만 크롤링 하는 방법

그리고, 웹페이지를 통하지 않고 검색어를 파이썬 터미널에서 직접 입력하도록 변경하는 법.

( 첫 페이지 약10개 검색에 한해서)

 

아래 주소 부분을 네이버에서 검색후 블로그 항목을 클릭한 후 복사해 온다.  

(주소부분 중 %ED%8C%8C%EC%9D%B4%EC%8D%AC 는 '파이썬' 검색어의 아스키? 변환값)

 

 

---  파이썬 코드 ---

import urllib.request

from bs4 import BeautifulSoup

 

baseurl = 'https://search.naver.com/search.naver?where=post&sm=tab_jum&query='

# 검색어인 " %ED%8C%8C%EC%9D%B4%EC%8D%AC " 부분을 빼고,  input(입력) 구문을 넣었다.

plusurl input('검색어를 입력하세요:')

url = baseUrl + plusUrl

html = urllib.request.urlopen(url).read()

 

soup = BeautifulSoup(html, 'html.parser')

title = soup.find_all(class_='sh_blog_title')

 

for i in title:

    print(i.attrs['title'])    # 제목('title') 부분만 출력

    print(i.attrs['href'])    # 링크 주소('href') 부분만 출력

    print() 

(단, 이 방법은 새로운 검색어를 입력 할 때 마다 주소를 복사해서 코드에 넣어야 하는 단점이 있다)  

출력 결과 1 :  (영문으로 'python' 입력 한 경우 : 영문의 경우 문제없이 잘 출력됨.)

출력 결과2 :  (하지만, 한글로 '파이썬' 입력 한 경우 : 한글입력의 경우 아래처럼 한글 변환에 문제가 되면서 에러가 남.)

 

5.  한글 검색에서의 에러 현상을 잡기위해 한글 변환 코드를 넣어 크롤링 해보자. 

 

import urllib.request

import urllib.parse  # 한글 검색어 변환 처리를 위해 임포트함

from bs4 import BeautifulSoup

 

baseUrl = 'https://search.naver.com/search.naver?where=post&sm=tab_jum&query='

plusUrl = input('검색어를 입력하세요:')

한글처리를 위해 추가됨 : urllib.parse.quote_plus()

url = baseUrl + urllib.parse.quote_plus(plusUrl)

html = urllib.request.urlopen(url).read()

soup = BeautifulSoup(html, 'html.parser')

title = soup.find_all(class_='sh_blog_title')

 

for i in title:

    print(i.attrs['title'])

    print(i.attrs['href'])

    print()

 

출력 결과 : 아래처럼 한글로 '파이썬'을 입력 후에도 결과가 제대로 출력 되었음을 알수 있다.

여기까지 되면,  추후에 간단히 파일 저장 명령어를 추가하여 검색결과를 파일로 저장 할 수도 있다. 

 

파이썬, 코드 다운로드 :

webscraper2.py
0.00MB

반응형
반응형

파이썬 에러】 파이썬(쉘) 프로그램이 에러뜨며 실행이 안 될 때!



 제목 처럼 잘 실행 되던 파이썬 셀프로그램이 아래와 같은 에러메세지를 띄우며 실행이 되지 않을 때가 있다. 

이때 에러를 해결 하는 방법에 대해 다루어 보고자 한다. 

(운영체제 : Windows7  ,   파이썬 버전 : Python 3.7.0  )

 


▶ 에러 증상과 화면 :

 얼마전 까지만 해도 잘 실행이 되던 파이썬이 아래창과 같은 에러 메세지를 띄우며 실행이 되지 않음.




에러메세지 글 : 
IDLE's subprocess didn't make connection. Either IDLE can't start a subprocess or personal firewall software is blocking the connection.   


 

 에러 대처 방법 : 

메세지 내용 대로 방화벽 관련 차단이 걸려 있지 않았는지 살펴 보았으나 별다른 문제는 없었다. 물론 그 사이 만진적도 없고... 


결론! 은 파이썬 파일을 작성해서 저장 할 때 기본 저장 디렉토리가 파이썬 쉘 프로그램이 설치되어 있는 폴더로 지정되어 있는데, 여기에 작업한 파일을 그대로 저장하게 되었고, 저장한 파일 이름중에 파이썬에서 예약된 환경변수 명과 같거나 유사한 이름을 가진 파일이 있을 경우인 것으로 파악되었다. 

문제가 된 파일명은  random.py 였다.  ( random 변수 생성에 관한 예제 파일을 만들어 놓은 것이 충돌을 일으킨 것으로 파악되었다. 그 외에, random_demo.py 라든지 유사한 파일에 대해서도 에러가 났다는 경우가 있는 것 같다. 


(아래 사진에서 파일유형이 "Python File" 파일인 것들이 충돌에 관여된다)



파이썬 프로그램 설치 경로 :   C:\Users\NOTE\AppData\Local\Programs\Python\Python37-32

위는 기본 경로로 설치 할 때의 경로이며,  'NOTE' 폴더명은 각자의 컴퓨터 이름이다.  (나의 윈도우 설치시 PC이름이 'NOTE' 임)


 【에러 해결 : 해당 폴더를 찾아가서 'random.py'파일 뿐 아니라 만들어 놓은 파이썬 파일들을 모두 다른 폴더로 옮기거나 삭제 하면 간단히 해결 된다. 


즉,  사진에서 파일유형이 "Python File" 파일인 것들을 모두 삭제 하거나 다른 폴더로 옮겨 놓는다.  그리고 가급적이면 이후 작업파일 들도 다른 폴더에 저장하는 것이 좋다.


 나의 경우는 위와 같은 방법으로 만들었던 파이썬 파일들을 모두 옮기고 파이썬 프로그램을 실행시켰더니 아래 이미지 처럼 에러가 뜨지 않고 아주 잘 실행 되었다. 





반응형
반응형

【 라즈베리파이 】 #10 RaspberryPi 실습

② LED On Off 실습 with Python



▶ 회로 구성 : 


▶ 개요 

 앞전 실험에서와 같은 회로를 구성하고, LED On Off를 조금더 다양하게 변화 시켜 보도록 하자.


▶ 실습절차 


저항과 LED 를 준비하고 위 도면과 같이 GPIO18번 핀에 연결되도록 한다.



▶ 파이썬 코드 

명령창에 한 줄씩 바로 입력 하지말고 저장파일을 만들어 아래와 같이 작성후 실행 시킨다.




▶ 코드설명 


- def LedOn(Portno, Delay) : ...  :  definition(정의) 문을 이용해서 자주 사용 되는 명령을 간결하게 할 수 있다. 

위 정의문을 통해 IoPort.output (led, True) ,  time.sleep(2) 를 LedOn(led, 2) 로 사용 할 수 있음으로 코딩이 간결해진다. 


- import RPi.GPIO as IoPort  :  기억하기 쉽고 쓰기 간단한 'IoPort' 라는 이름으로 포트를 지정 하는 것이다.


- import time   :  delay 타이밍을 위해 시간 함수를 사용하기 위해서는 time 함수를 넣어야 한다. 


- IoPort.setup(led,IoPort.OUT)    // led 포트인 18번 포트를 출력포트로 설정

- led = 18

- LedOn(led,5)  // 18번 포트(led 연결) 로 5초간 High 신호를 출력 (LED On)



▶ 실행 결과 


2초간 LED On

1초간 LED Off

1초간 LED On

1초간 LED Off

5초간 LED On

1초간 LED Off


반응형

【 파이썬 】#01 파이썬 시작하기

Language/파이썬 Python 2018. 4. 19. 10:43 Posted by 엑소더스팩토리
반응형

【 파이썬 】 #01 파이썬 시작하기 (with Raspbian)




파이썬의 특징

파이썬은 네델란드 개발자인 귀도 반 로섬(Guido van Rossum)이 만든 언어이다. 1990년도에 파이썬 첫 버전이 공개되었다.

프로그래밍 비전공자 혹은 입문자들이 쉽고 간결하게 프로그래밍이 가능하며, 머신러닝, 그래픽, 개발등 여러 업계에서 선호하는 언어로 급성장하고 있는 언어이다.

파이썬은 구글에서 가장 많이 애용하는 개발언어가 되었으며 미항공우주국(NASA)은 물론 세계 유명 대기업부터 중소기업까지 두루 애용하는 개발언어로 자리 잡았다


2016년도 조사에서 파이썬은 인기언어인 자바를 제치고 인기 1순위의 언어로 선정 된 바 있다. 




파이썬 시작하기 




【 실행 순서 

OS 메뉴  개발  Python3 (IDLE)





▶ 명령어 실습 (명령어 입력하기)


파이썬 쉘 (Shell) 화면에서 "Hello world !" 를 출력해본다.


명령어는 아래와 같다


print("Hello world")    


↓ 실행 결과



▶ 수식 계산 실습 


파이썬은 쉘 (Shell) 화면에서 계산기 처럼 수식 계산을 바로 할 수 있다.


실행은 아래와 같다


5*2+10/2


↓ 실행 결과



▶ 변수 생성하고 사용하기

파이썬은 쉘 (Shell)에서 바로 변수를 선언 및 초기 값을 넣어 줄 수 있으며 , 변수 선언과 동시에 수식 계산을 할 수 있다. 


실행은 아래와 같다


a = 2 + 3

b = 3 + 4 

a + b 


↓ 실행 결과



c = a + b 

 c                   //  'c'  값을 출력하라~ 


↓ 실행 결과



▶ 수학 함수 사용하기

파이썬에서 특정 함수를 사용하기 위해서는 import 명령어를 이용하여 삽입해주어야 한다. 


아래는 수학 함수인 'math'를 삽입한 모습이다.

또한, 'math' 함수에 포함되어 있는 제곱근(sqrt(2)) 을 구해보자 


실행 명령은 아래와 같다

import math

math.sqrt(2)



↓ 실행 결과



다음 파이썬 글에서는 별도의 창을 띄워 이미지를 그려주는 함수에 대해 다뤄보자.


반응형