노마드 코더에서 Python을 이용한 웹 스크래퍼를 만드는 강의를 듣고 있습니다. 웹 페이지에 있는 HTML 코드에서 정보를 가져올 때에 BeautifulSoup
을 사용해봤습니다.
저도 수업 강의 내용과 문서를 보면서 해보았습니다.
BeautifulSoup?
BeautifulSoup은 HTML
과 XML
문서를 분석 할 수 있는 Python
패키지 입니다. HTML 에서 데이터를 추출하여 사용할 수 있기 때문에 웹 스크래핑에 유용합니다. 웹 스크래핑과 웹 크롤링에 대해서 개념이 명확하지 않으시다면 아래 링크 참고 해주세요. 전체 함수는 BeautifulSoup 문서를 참고해주세요.
Python 웹 스크래핑
먼저 웹스크래핑을 하기 전에 스크래핑 할 웹 페이지의 html 코드를 가지고 와야합니다. 웹 화면상 보이는 정보는 html에 있기 때문이죠. 티스토리 스토리에 있는 정보를 한 번 스크래핑 해보겠습니다. BeautifulSoup의 find
를 이용해 읽어온 html의 정보중 내가 원하는 태그 정보를 찾아보겠습니다.
웹페이지에서 스크래핑을 막기도 해서 노마드 코더 수업 내용에서 다뤘던 stackoverflow에서
해보도록 하겠습니다.
웹페이지는 웹페이지 검사를 통해서 html코드를 볼 수 있습니다. 그리고 원하는 곳을 클릭하게 되면 해당 위치와 매칭 되는 html 코드를 볼 수 있는데요. 현재 스택오버플로우에 검색된 직업 리스트 중 하나입니다. html 코드를 보겠습니다.
html 공부를 하지 않고 해봤기 때문에 좀 난해하기도 했는데요. 결과론적으로 보면 BeautifulSoup의 find를 통해서 이런 html 태그의 정보를 찾아올 수 있다로 생각하면 됩니다.
import requests
from bs4 import BeautifulSoup
url = "https://stackoverflow.com/jobs?q=python"
result = requests.get(url)
soup = BeautifulSoup(result.text, "html.parser")
results = soup.find_all("div", {"class" : "-job"})
jobs = []
for result in results:
print(result)
먼저 requests
를 통해서 해당 url
결과를 받아옵니다. 이 결과를 BeautifulSoup을 이용해서 html 코드로 변환할 수 있습니다. 이제 html 코드가 있으니 우리는 원하는 내용을 찾기만 하면 됩니다. find_all은
찾으려는 html태그와 동일한 코드를 모두 찾아 줍니다. div
태그 중 class
속성의 값이 -job
인 부분을 찾았습니다.
해당 html 코드부분아래에 원하는 직업 정보들이 모두 들어있는데요. 모두 찾았기 때문에 리스트 형식으로 정보를 가지고 있습니다. 이제 for 루프문을 통해서 내부에 정보를 찾아보도록 합시다.
다음으로는 해당 부분의 내용을 찾아 봅시다. 마찬가지로 웹 검사를 통해서 해당 부분의 html 코드를 확인하겠습니다.
해당 영역 html 내용입니다. h2
태그 아래에 정보가 모아져 있습니다.
for result in results:
title = result.find("h2").find("a")["title"]
print(title)
가장 상단 태그가 h2입니다. h2를 먼저 찾습니다. 그 후 찾은 결과의 a를 찾는 코드입니다. 코드를 보면 [ ]
가 있습니다. 이건 속성입니다. html을 보면 title
이라는 속성에 값이 Full Stack Engineer 블라 블라인 것을 볼 수 있습니다. 이렇게 title 속성 값을 가져와도 되고, 아래쪽에 a
태그의 텍스트를 가져와도 무방합니다. 가져온 title값을 출력해보겠습니다.
잘 출력이 되었습니다. BeautifulSoup 을 이용해서 간단하게 한 번 스크래핑을 해보았습니다. 노마드코더 챌린지를 통해서 처음 파이썬도 사용해보고 간단한 웹 스크래핑도 해보고 재미있었네요.