ice rabbit programming

[Python] 파이썬으로 크롤링하기 본문

Development/Python

[Python] 파이썬으로 크롤링하기

판교토끼 2020. 6. 13. 23:07

크롤링

크롤링은 웹 페이지에서 필요한 데이터를 추출하는 작업이다. 이 데이터들을 원하는 형태로 파싱하여 사용한다. 도식화하여 과정을 보면 다음과 같다.

웹에서 HTML 구조 파악 -> request로 HTML 가져오기 -> HTML 분석하여 필요한 데이터 가져오기 -> 개행 문자 등 필요 없는 부분 필터링(파싱) -> 실제 사용

가져온 HTML을 분석하는 도구에는 여러 가지가 있지만, 여기서는 가장 널리 쓰이는 BeautifulSoup을 사용한다.

BeautifulSoup은 HTML뿐 아니라 XML, JSON 등을 모두 분석할 수 있다. 아래와 같이 객체를 만들고 분석할 수 있다.

soup = BeautifulSoup(open("index.html"), "html.parser") # 객체 생성
soup.find("p") # 처음 등장하는 태그 찾기
soup.find_all("p") # 모든 태그 찾기
soup.find("div", class_="kdh") # 태그 및 클래스를 통해서 찾기
soup.find("div", id="kdh") # 태그 및 아이디를 통해서 찾기
soup.find("p").find("P") # find 결과도 객체이므로 재추출 가능
soup.find("p").get_text() # 태그가 가진 텍스트 추출

find를 계속해서 진행하거나, HTML 태그 내에 있는 클래스나 아이디 등을 통해 특정 태그를 가져올 수도 있다.

웹 페이지는 HTML로 표현되는데, 이를 얻기 위해 requests 라이브러리를 사용한다. requests 라이브러리는 python에서 HTTP 요청을 보내는 역할을 한다. HTTP 통신은 간략하게 request(요청)를 보내면 response(응답)이 오는 형식의 통신이다. 그 외에도 HTTP 통신에 대해 많은 내용이 있지만 여기서는 GET 방식 요청과 POST 방식 요청에 대해서만 간단히 보겠다.

GET : 정보를 조회하기 위해 주로 요청하는 방식으로, 크롬 등 브라우저로 접속하면 GET으로 요청을 보낸다. 파라미터가 다 드러나며 주로 DB 안의 데이터를 건드리지(삽입, 수정 등) 않는 경우에 사용한다.
POST : 정보를 생성, 변경하기 위해 주로 요청하는 방식으로, 로그인하거나 메일을 삭제하는 등의 동작을 할 때 주로 사용한다. REST API를 따르면 PUT과 DELETE를 사용하기도 하지만 그렇지 않을 경우에는 DB 안의 데이터를 건드리는 경우에 사용한다.

url = "https://www.google.com"
result = requests.get(url) # url에 GET request를 보냄, result에 response가 담김
soup = BeautifulSoup(result.text, "html.parser") # requests와 BeautifulSoup의 조합

실제로 웹을 크롤링을 할 경우에는 할 페이지로 들어가서 F12나 우클릭-검사를 선택해 개발자 도구를 켜 HTMl의 태그 구조를 파악한다. 그 후에 위에서 본 것처럼 태그를 통해 필요한 정보를 찾는 것이다. 아래는 현재 포스팅 중인 페이지에서 F12를 눌러 개발자 도구를 켠 것이다.