Dev-기타/Python

웹 크롤링의 기초 (feat. robots.txt)

lafortune 2023. 7. 17. 14:04
반응형

인터넷에서 정보를 수집하는 기술인 '웹 크롤링'에 대해 알아볼까 합니다.

 


웹 크롤링이란?


우리는 인터넷에서 다양한 정보를 찾는 데 시간을 많이 보냅니다. 하지만 웹 사이트에 접속해서 웹 페이지를 찾고, 페이지에 존재하는 텍스트나 이미지를 살펴보며 원하는 정보를 얻는 것은 시간이 많이 드는 일이기도 합니다. 

또한, 요즘과 같은 빅데이터 시대에는 한 가지 정보를 얻기 위해서도 여러 웹 사이트를 방문해야 하는 경우가 많습니다. 그런데 이런 방식은 매우 비효율적일 수 있습니다.

여기서 '웹 크롤링'이라는 개념이 등장합니다. 

 

웹 크롤링은 웹 사이트에서 우리가 원하는 정보를 자동으로 수집하는 프로그램을 이용하는 행위를 말합니다.

이 프로그램을 웹 크롤러라고 부르며, 이를 통해 단시간에 많은 정보를 수집하고 반복 작업을 자동화할 수 있습니다. 이를 통해 시간을 절약하고 우리가 원하는 정보를 효과적으로 얻을 수 있게 되죠.

웹 크롤링과 비슷한 개념으로는 웹 스크래핑이 있습니다.
두 용어 모두 웹 사이트에서 원하는 정보를 추출하는 의미이지만, 웹 크롤링은 사이트의 전체 정보를 가져오는 데 비해 웹 스크래핑은 원하는 정보만 일부 추출하는 의미가 강합니다. 하지만 일상적으로는 웹 크롤링이라는 용어를 더 자주 사용하므로 이 글에서도 웹 크롤링이라는 용어로 통일하여 사용하도록 하겠습니다.

 


웹 크롤링 과정

 

웹 크롤링은 웹 사이트의 정보를 추출하는 프로세스를 의미합니다. 다음은 웹 크롤링의 기본 단계입니다.

 

1. 크롤링하려는 웹 페이지의 URL을 선정합니다. 이 URL은 데이터를 가져오려는 대상 웹사이트의 주소입니다.

 

2. 선정한 URL로 HTTP 요청을 보냅니다. 이는 해당 웹 페이지의 HTML 코드를 받아오기 위한 단계입니다. Python에서는 requests 라이브러리를 통해 요청을 전송할 수 있습니다.


3. 받아온 HTML 코드를 파싱합니다. 이 파싱 과정에서는 웹 페이지의 구조를 이해하고, 필요한 데이터를 추출할 수 있도록 HTML 코드를 분석합니다. 이때 BeautifulSoup 라이브러리가 주로 사용됩니다.


4. 파싱한 HTML에서 필요한 데이터를 추출합니다. 예를 들어 특정 태그 내의 텍스트를 가져오거나, 특정 속성을 가진 태그들의 리스트를 가져오는 작업을 수행합니다.


5. 추출한 데이터를 원하는 형태(예: CSV, JSON, DB 등)로 저장합니다. 이는 pandas 라이브러리를 통해 쉽게 할 수 있습니다.

6. 필요에 따라 이 과정을 반복하여 다른 웹 페이지에서도 데이터를 크롤링합니다. 예를 들어, 웹사이트의 다른 페이지로 이동하는 링크를 찾아 그 페이지도 크롤링하는 등의 작업을 수행할 수 있습니다.


그러나 웹 크롤링을 할 때에는 해당 웹사이트의 이용 약관을 반드시 확인하고, 법적인 문제가 없는 범위에서만 진행해야 합니다. 또한, 사이트의 서버에 과부하를 주지 않도록 적절한 간격을 두고 크롤링하는 것이 좋습니다.

 


웹 크롤링 주의사항

웹 크롤링은 매우 유용한 것 같지만 모든 사이트에서 사용할 수 있는 것은 아닙니다. 무분별한 웹 크롤링을 하게 되면 서버에 부하를 줄 수 있기 때문입니다.

 

그렇기 때문에 크롤링을 하기 위해서는 해당 웹 사이트에서 robots.txt 파일을 참고해야 합니다.

 

웹 크롤링을 할 때 참고해야 하는 robots.txt 파일은 웹사이트의 루트 디렉토리에 위치하게 됩니다. robots.txt 파일은 웹 로봇(또는 스파이더, 크롤러 등)이 사이트를 크롤링할 때 어떤 부분을 접근할 수 있는지, 또는 접근하지 말아야 하는지를 지시하는 역할을 합니다.

예를 들어, www.example.com 이라는 웹 사이트의 robots.txt 파일은 다음 URL로 접근할 수 있습니다. http://www.example.com/robots.txt

robots.txt 파일 내에는 다음과 같은 정보가 들어갑니다.

User-agent: *
Disallow: /private/
Disallow: /temp/

위 예시에서 User-agent: *는 모든 웹 로봇들을 대상으로 지시하겠다는 의미입니다. 특정 웹 로봇을 대상으로 지시하려면, 그 웹 로봇의 이름을 넣으면 됩니다. (예: User-agent: Googlebot)
Disallow: 명령어는 웹 로봇이 접근하지 말아야 하는 디렉토리 또는 파일을 지정합니다. 위 예시에서는 /private/와 /temp/ 디렉토리에 대한 접근을 금지하고 있습니다.

단, robots.txt 파일은 웹 로봇에게 '지시'를 내리는 것이지 '강제'하는 것이 아닙니다. 따라서, 이를 무시하고 접근하는 웹 로봇도 있을 수 있습니다. 하지만 대부분의 검색엔진 등에서는 robots.txt 파일의 규칙을 준수하도록 되어있습니다.

 


파이썬을 활용한 웹 크롤링


웹 크롤링을 위한 언어는 다양하지만, 가장 널리 사용되는 언어는 파이썬입니다. 

파이썬은 문법이 간결하고, BeautifulSoup나 Scrapy와 같은 강력한 라이브러리가 있어서 웹 크롤링을 쉽게 할 수 있습니다.

웹 크롤링에 필요한 파이썬 코드 작성 방법과 이를 활용한 데이터 수집에 대한 상세한 내용은 다음 포스트에서 다루도록 하겠습니다.

그래서 아직 파이썬에 익숙하지 않으신 분들은 파이썬 기초부터 익혀두시면 도움이 되실 거에요.

 

 

반응형