> For the complete documentation index, see [llms.txt](https://soojle.gitbook.io/project/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://soojle.gitbook.io/project/undefined-4/undefined-1/undefined.md).

# 크롤러 규격화

## 개요

문서를 수집하는 대상 홈페이지들은 전부 규격이 다르기에, 크롤러 코드를 어 떠한 웹페이지에서도 정보를 체계화할 수 있도록 규격화할 필요가 있다. 이에 따라서 크게 5가지 단계로 나어져 반복한다.&#x20;

1\. 크롤링 대상 URL에 접속을 한다. \
2\. 대상 URL의 페이지를 반복하면서 동시에 해당 사이트의 구조에 따른 데이터 파싱 방법을 결정한다. 3. 해당 URL의 페이지에서의 게시물들을 리스트화 시킨다. \
4\. 리스트화 시킨 게시물들에서 규격화된 정보를 각 게시물마다 추출한다. \
5\. 추출된 정규화된 정보들을 데이터베이스에 저장한다.

## 크롤링 대상 URL 접속&#x20;

다음과 같이 모든 URL을 Crawling 함수에 인자로 넣어서 실행시켜준다.

![](https://728901758-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-L_Wo7SRUvbKJuPojzzZ%2F-LuORQdx_aeJLS-hz0XS%2F-LuOUndbWqhDpV0_NvBz%2Fimage.png?alt=media\&token=52d7cb76-06d0-4be2-8dc4-7ec3c77fefd7)

## URL 파싱 및 페이지 반복

다음과 같이 페이지를 1부터 1씩 증가시켜서 목표 URL을 생성한다. 만약 해당 페이지에서 크롤링한 게시물이 0개라면 다음 크롤러로 넘어가는 구조이다.

![](https://728901758-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-L_Wo7SRUvbKJuPojzzZ%2F-LuORQdx_aeJLS-hz0XS%2F-LuOVZauCX8vRGyNkey7%2Fimage.png?alt=media\&token=43488100-63b4-4443-b5e5-5cad8b258c1a)

해당 URL의 페이지의 구조에 따른 분류를 시작한다. BeautifulSoup를 통해서 파싱하는 경우와, Selenium을 통해서 파싱하는 경우를 나누고, BeautifulSoup를 통해서 파싱하는 경우에서는, 해당 사트의 HTML문서의 인코딩 및 디코딩 방 식의 유무에 따라 개별적인 처리를 해준 뒤에, 해당 HTML 문서를 가져온다.

![BeautifulSoup 와 Selenium 및 Parsing 구조 분류](https://728901758-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-L_Wo7SRUvbKJuPojzzZ%2F-LuOVbWoDexpTRHyAsyp%2F-LuOVfqwzZ6to2L8Hsbv%2Fimage.png?alt=media\&token=8271ced3-e8eb-4808-a2f7-ee5e8716900b)

위 코드에서 해당 HTML 파일의 문서를 파싱하기 위해서는 다음과 같은 구조 로 동작한다.

![HTML Parsing 분류](https://728901758-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-L_Wo7SRUvbKJuPojzzZ%2F-LuOVbWoDexpTRHyAsyp%2F-LuOVyS-sPKW5VZJcnb7%2Fimage.png?alt=media\&token=4f1e2de8-5741-48af-8cfe-065ee882cba1)

먼저 파싱 하기 전에 header을 선언해준다. 이 header은 현재 이 사이트에 접속 할 때 사용되게 된다. HTML 사이트에 접근하기 위해서는 HTTP 통신 규약에 의해서 접속을 하게 되는데, 대상 사이트에 접근을 하기 위해서는 클라이언트의 정보를 같이 넣어서 요청을 해야 한다.&#x20;

이 과정을 header에서 선언해주는 것이 다. 이 것뿐만 아니라, verify라는 파라미터를 False로 설정하여서, “https\://” 뿐만 아니라 SSL 때문에 접근오류가 발생하는 “http\://” 로 시작하는 사이트 인증 오류 문제를 무시 해준다. 또한 euc-kr 또는 UTF-8 의 인코딩 또는 디코딩 문제로 인한 해결 방법을 분류하였다.

![Driver 연결](https://728901758-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-L_Wo7SRUvbKJuPojzzZ%2F-LuOVbWoDexpTRHyAsyp%2F-LuOW7J5fAuj6dnzeQ4Q%2Fimage.png?alt=media\&token=3180d422-4245-4af3-9dc1-b900e6b1acf4)

이 외에도 Selenium 같은 경우에는 현재 Chrome 버전에 맞는 chromedriver을 설치하여서, 이 chromedriver을 통해서 크롤링을 진행하도록 설정하였다. 이 chromedriver도 위 requests 방식대로 header에 존재하는 정보를 넣어주었으며, chromedriver을 headless 속성을 넣어줌으로서, 동일하게 크롤링 프로그램 이 작동하도록 설정하였다.&#x20;

이렇게 해당 URL에 대한 BeautifulSoup 또는 Selenium 방식으로 해당 HTML 파일을 파싱 한 후 데이터를 크롤링하는 구조가 되겠다.
