2019. 10. 4. 18:24

 

안녕하세요. 게임개발자 놀이터 입니다.

 

이전 포스팅에 이어 웹크롤링에 대해서 포스팅 하고자 합니다

 

웹에서 정보 가져오기 - 1

 

저번에 requests 설정까지 마무리 했습니다.

 

그럼 이제 requests가 정상 작동하는지 확인해봅시다.

 

 

이와 같이 소스를 입력 한 후 빌드 ( 컨트롤 + 쉬프트 + B ) 를 해봅시다.

 

 

status_code 값과 OK 값이 200, true가 나온다면 성공입니다.

 

하지만 html 텍스트는 현재 읽을 수 없습니다.

 

html을 읽기 위해선 다음과 같은 세팅이 필요합니다.

 

BeautifulSoup

 

html의 내용을 파이썬에서 사용할 수 있도록 파싱 해주는 패키지 입니다.

 

명령 프롬프트 창을 이용해 bs4를 설치 해줍니다.

 

 

 

이제 html을 파싱할 수 있습니다.

 

 

위처럼 소스를 입력하고 빌드하시면 HTML 소스가 로그창에 출력 된걸 확인 하실 수 있습니다.

 

데이터 검색 

 

테스트에 사용 할 HTML  URL입니다. :  https://www.google.com/search?q=+site:tistory.com+%EC%8B%9C%EB%A6%AC%EC%8B%9C%EC%95%88&sa=X&ved=2ahUKEwjuofzmjoLlAhWUE4gKHS-wAYEQrAN6BAgGEBQ&biw=2048&bih=1042

구글 페이지에서 [site:tistory.com 시리시안] 을 검색한 URL입니다.

 

 

 

이곳에서 저는 검색 제목만 모아서 크롤링 해보려 합니다.

 

크롬에서는 검사 기능을 통해 바로 HTML을 볼 수 있습니다.

 

찾고자 하는 글에 우클릭 후 검사를 눌러 줍니다.

검사를 누르면 우측에 HTML 창이 뜨게 됩니다.

 

 

내용을 보니 저 검색결과는 div 태그에 class 'ellip'를 가지고 있군요. 이 정보를 이용해 파싱해 찾아 봅시다.

 

 

전체 소스입니다. 중간에 잘린 url은 위에 적용된 HTML입니다.

 

빌드 해보니 아무런 결과가 나오지 않았습니다. 아무래도 클래스 명칭 'ellip' 로 찾는게 문제 인거 같네요.

 

정확한 HTML 비교를 위해 prettify() 로 HTML을 출력 해봤습니다.

 

클래스 명칭이 다르네요, 아무래도 검색할때 생성되는 구조이거나 랜덤으로 만들어지는거 같습니다. 따라서 클래스 비교 방식은 사용 할 수 없겠군요.

 

이번엔 글 제목을 클릭해서 들어 갈 수 있으니, a 태그로 찾은 후 div로 분류해봤습니다.

 

 

출력되는 list2를 확인해보니 아래와 같았습니다.

 

 

첫번째 검색결과와 제가 필요했던 애들의 클래스 명칭이 전부 똑같네요. 이건 이용할 수 있을꺼같습니다.

 

 

첫번째 클래스 명칭을 이용해 찾도록 수정했습니다.

 

 

제가 얻고자 했던 목록들만 얻을 수 있게 되었습니다.

 

이처럼 크롬의 HTML을 분석하여 원하는 정보를 찾을 수 있습니다. 구글의 경우 위와 같았지만, 다른 사이트의 경우엔 분석이 우선시 되니, HTML 을 읽는 기술이 필요할꺼 같습니다.

 

감사합니다.

 

 

Posted by 시리시안

댓글을 달아 주세요

  1. Favicon of http://tvple.me/ BlogIcon 티비다시보기 2020.07.03 16:55  댓글주소  수정/삭제  댓글쓰기

    잘 보고 갑니다~~

2019. 10. 4. 16:45

 

안녕하세요. 게임개발자 놀이터 입니다.

 

웹크롤링에 대해서 포스팅 하고자 합니다

 

웹 크롤러

 

우리가 어떤 정보를 웹 브라우저로만 보는 것이 아니라, 그 정보 들을 내가 이용하기 편한 방식(XML, JSON) 등으로 DB에 쌓아두고 싶을 때가 있습니다.

웹 데이터를 원하는 방식으로 가공하여 저장하는 기능을 웹크롤링 한다고 합니다.

 

웹에서 정보 가져오기 - 1

 

php 의 requests 라는 라이브러리를 이용해서 웹의 정보를 가져옵니다.

 

설치하기 위해선 pip를 이용합니다.

 

[Window+R]  + cmd 를 이용해 명령 프롬프트를 엽니다.

 

사용자 PC에 php가 설치되어 있는 폴더로 이동합니다.

 

폴더 안에 Scripts 폴더까지 이동합니다.

 

저의 경우는 C:\Python27\Scripts 입니다.

 

그후, pip install requests를 입력합니다. 아래 화면 처럼 뜬다면 성공입니다.

(pip 업그레이드 문구는 무시해주세요 )

 

 

제대로 설치 되었는지 확인을 위해 ATOM 에디터로 넘어와 임포트 해봅니다.

 

ATOM Python 모듈 설정

 

ATOM에서 pip로 설치한 모듈을 사용하려면 추가로 설정해줘야 합니다.

 

우리는 '파이썬 프로그래밍 -01 ATOM 설치 (Python)' 에서 ATOM 플러그인으로 'script'를 설치 했습니다.

 

모듈을 내장하여 빌드 하기 위해선 'script'플러그인은 조금 수정 해줘야 합니다.

 

우선 [컨트롤 + ,]을 눌러 settings 창을 엽니다.

그후, 좌측 Packages 메뉴를 누른후 Installed Packages 에서 'script'를 검색한 후 Settings를 눌러 줍니다.

 

그러면 'script'의 설정 창이 열리게 되는데, [View Code]를 눌러 줍니다.

 

ViewCode를 누르면 아톰창이 새로 열리게 됩니다.

 

그후 왼쪽 프로젝트 목록에서

 

[ script / lib / grammars / python.coffee ]를 열어 줍니다.

 

 

 

python 으로 되어있는 경로를 각각 파이썬 경로로 수정해줍니다.

 

저의 경우는 [ C:/Python27/python ] 입니다.

 

 

이후 창을 닫은 후, 메인 소스에 requests를 임포트 하는 코드를 작성 한 후 빌드 해보면

 

 

 

아무런 에러 없이 완료 된다면 성공입니다.

 

감사합니다.

 

이후 내용은 다음 포스팅에서 진행 하겠습니다.

 

 

 

 

 

 

 

 

 

 

 

Posted by 시리시안

댓글을 달아 주세요

2019. 10. 4. 15:45

 

안녕하세요. 게임개발자 놀이터 입니다.

 

ATOM으로 python 프로그래밍 중 에러가 발생하여 해결법을 포스팅 하려합니다.

 

먼저 에러 로그는 다음과 같습니다.

 

UnicodeEncodeError: 'cp949' codec can't encode character '\xa0' in position 63430: illegal multibyte sequence

 

유니코드 관련 에러로 확인됩니다.

 

ATOM의 우하단을 확인해봅시다.

 

 

해당 인코딩 방식이 UTF-8 인지 확인합니다.

 

만약 UTF-8이 아니라면, UTF-8로 변경 후 다시 시도해봅니다.

 

이미 UTF-8 이거나, 에러가 계속 된다면

 

 

해당 소스를 최상단에 추가 해주면 됩니다.

 

감사합니다

 

 

Posted by 시리시안

댓글을 달아 주세요