Python

[Python] 크롤링에 대해서

Rosie_dev 2021. 8. 5. 16:18

0. 크롤링에 대해 접하게 된 계기

개발이라고 하기는 어렵지만, 기존 자료를 보기 편하게 가져올 수 있는 방법인 크롤링에 대해 알고 싶다는 생각에 학습하게 되었다. 물론 1차원적인 생각이라는 것을 검색을 통해 알게 되었지만, 기본적인 학습도 필요하기 때문에 저작권 침해하지 않는 선에서 개인적인 학습을 위해서만 사용해보기로 했다.

 


1. 크롤링이란 무엇인가?

크롤링은 검색에서 정보를 구성하는 방법이라고 할 수 있다. 구글 웹 색인에서 검색한 단어가 있다면, 그 단어가 어디에 포함되는지 URL, 글 페이지 내 등등을 확인한다. 또 검색 알고리즘에 따라 웹 페이지의 신뢰성을 분석하고 검색한 결과를 도출하는데 사용된다. 그 웹페이지에서 연결된 페이지를 검색하고, 또 하이퍼링크로 들어가고 연속된 행위를 통해 검색 범위를 넓히게 된다. 

 


2. 크롤링 주의점

사람인과 잡코리아 크롤링 사건에서도 볼 수 있듯이, 웹 페이지 상에 정보를 저작권을 침해할 정도의 크롤링은 문제가 된다. robot.txt로 웹 크롤러 로봇의 접근을 제어하기 위한 규약이 있는데 사이트 최상위 경로/robot.txt로 치면, 볼 수 있다. 따라서 크롤링하고자 하는 부분이 있다면, 권고사항이라고는 하나 이를 확인해서 크롤링하는 것이 바람직하다. 기본적으로 네이버는 모든 것을 disallow하고 있고, 구글의 경우는 allow하는 것들도 있으니 확인해보자.

 


3. 한 웹사이트 내에서 원하는 코드 가져오기

웹페이지 상에서 console로 querySelectorAll 이용해서 원하는 코드의 값을 도출해낼 수 있다. 검색 알고리즘과는 다소 상이하지만 도출하는 값을 중점으로 생각해서 보기로 하자. 흔히 웹 크롤러라고 검색하면 나오는 크롤링을 해보도록 하자. 여러 개의 하이퍼링크를 타고 검색되는 알고리즘과 이것도 상이하다. 하지만, 코드를 가져오는 연습?! 정도로만 생각하면 좋을 것 같다.

 

VS Code에서 python을 이용해서 나타낼 수 있다. 그 전에 모듈을 프롬프트 창을 띄워서 pip install bs4 requests

모듈 2개를 다운로드한다.

beautifulSoup는 HTML과 XML을 파싱하기 위한 파이썬 패키지이다. 파싱은 구문을 해석할 수 있는 단위로 불러와서 웹상에서 필요한 데이터를 가공해 서버로 불러오는 작업을 말한다. requests은 python 프로그래밍 언어용 HTTP 라이브러리이다. 위키백과 예제에도 나와있지만 페이지의 코드를 불러올 때, reqeusts.get("url주소").text와 같이 가져올 수 있다.

 


+ Pylance report missing module source

Pylance 확장 프로그램에서 VS Code 내 파이썬 버전을 다르게 인식하고 있는 경우, missing module이라는 문구가 나타나며, import 하지 못하는 경우가 생겼다. Ctrl+Shift+P 단축키를 이용해서 python을 입력해서 적용되어야 하는 python 버전을 선택해주면 해결된다. 재실행해도 안되는 경우는 VS Code를 재실행하면 되는 경우도 있었다.

 

+ 터미널 창에 module이 없다고 나오는 경우

터미널 창에 install한 모듈이 없다고 나오는 경우가 있었다. 이때는 해당 경로에 install한 것이 잘 반영되지 않는 경우가 있어서,

(1) uninstall하고 다시 재설치하거나

(2) pip.exe가 있는 위치에서 install 하는 방법으로 해결했다. pip.exe의 위치는 python이 설치된 경로에서 하위 Scripts 폴더 내이다.

 


4. 텔레그램 봇 만들기

크롤링하면 빠지지 않는 텔레그램 봇 만들기 학습이다. 텔레그램에서 BotFather를 검색해 메뉴얼에 따라 /newbot으로 봇 생성 설정을 할 수 있다. Done! Congratulations on your new bot. 라는 문구가 나오면서, token 값이 나온다.

pip install python-telegram-bot으로 설치 후,

import telegram

 

(class) Bot(token: str, base_url: str | None = None, base_file_url: str | None = None, request: Request | None = None, private_key: bytes | None = None, private_key_password: bytes | None = None, defaults: Defaults | None = None)

이제 Bot이라는 속성을 사용하면 되는데, 괄호 안 토큰 값을 아까 설정 후 받은 토큰 값으로 입력해주면 된다.

 

위 값에 sendMessage( )을 이용해서 텔레그램 봇 채널로 내용을 전송할 수 있다. 괄호 안 내용은 채널 id 값과 전송하려는 내용을 적어주면 된다. 채널 id 값은 getUpdates로 우회적으로 구할 수 있다.

 


웹 크롤링 어디까지 허용되는가? (Web Crawling, Web Scrapping Issue)

🖨 '웹 크롤러' 좀 그만 만들어라

Google 검색의 원리 | 크롤링 및 색인 생성

No Module Named bs4 beautifulsoup python 파이썬 :: studyhard24

20초도 안걸리는 파이썬 설치 경로 알아내기 !! | 파이썬 설치 경로 확인

Visual Studio Code 에서 Python 패키지의 Unresolved Import Error 를 처리하는 방법

OKKY - 파이썬 pip 및 텔레그램 모듈 설치관련 질문입니다.

Beautiful Soup (HTML parser) - Wikipedia

1. Parsing이란 무엇인가?

 

 

 

 

댓글