2024. 2. 1. 10:46ㆍPython
오늘은 크롤링을 할 수 있는 방법 중 하나인 라이브러리 BeautifulSoup에 대해 다뤄볼까 합니다. 해당 라이브러리는 기본 라이브러리가 아니기 때문에 설치를 먼저 진행해야합니다. 그리고 HTTP 요청을 쉽게 보낼 수 있게 해주는 requests도 함께 사용하도록 하겠습니다.
pip install beautifulsoup4 requests
이후 라이브러리를 불러오고 간단하게 응답 코드를 출력하는 코드를 작성해보겠습니다.
import requests
import bs4
from bs4 import BeautifulSoup
import pandas as pd
URL='https://www.naver.com/'
req=requests.get(URL)
print(req.status_code)
다음은 네이버 페이지의 응답 코드를 출력할 수 있는 코드입니다. 응답코드는 웹 서버가 클라이언트의 요청을 처리한 결과를 나타낸 것으로 이 코드를 통해 요청이 성공적으로 처리되었다는 것을 알 수 있습니다.
다음은 정말 간단하게 html에서 데이터를 크롤링 하는 코드를 짜보도록 하겠습니다. 아무 인터넷 사이트에서 데이터를 무단으로 크롤링하는 것은 법적 책임과도 연결될 수 있습니다. 그렇기 때문에 간단한 .html파일을 통해서 어떤 방식으로만 진행 되는지 알아보고자 합니다.
모바일 컴퍼니
- 애플
- 삼성
- 노키아
- LG
안녕
<!DOCTYPE html>
<html>
<head>
<title>test</title>
<meta charset="utf-8">
</head>
<body>
<h2>모바일 컴퍼니</h2>
<ul id="mylist" style="width:150px">
<li>애플</li>
<li>삼성</li>
<li>노키아</li>
<li>LG</li>
</ul>
<p>
안녕
</p>
</body>
</html>
위에서 얻고 싶은정보는 회사들의 이름을 얻고 싶습니다. 회사들의 이름은 <li>태그에 들어있습니다. 그럼 우리는 여기에 접근을 하면 됩니다. 데이터 크롤링을 위한 단계는 다음코드에 주석으로 표시하겠습니다.
with open('index.html','r',encoding='UTF-8') as f:
#step1:데이터 수집
contents = f.read()
#step2: 데이터 파싱(HTML파일을 BeautifulSoup 객체로 변환)
soup = BeautifulSoup(contents,'lxml')
#step3: 데이터 수집을 위한 특정 태그 찾기
companies=[]
#step4: 데이터 가공
for i in soup.find_all('li'):
companies.append(i.text)
print(companies)
#step5: 데이터 프레임화
crawling_dict={'회사명':companies}
result=pd.DataFrame(crawling_dict)
print(result)
#step6: 파일 내보내기
result.to_csv()
다음으로는 각 스텝별로 설명을 좀 붙히겠습니다.
step1. .html파일을 읽기 모드('r')로 열고, 파일의 내용을 contents에 저장한것입니다. 그리고 한글이 포함되어 있기 때문에 인코딩은 utf-8을 이용합니다.
step2. 읽은 html 파일은 BeautifulSoup를 사용하여 lxml로 파싱합니다.
step3. 수집할 데이터를 담을 리스트를 생성합니다
step4. soup.find.all('li')를 통해 파일의 모든 <li>태그를 찾아 text를 추출하고 리스트에 추가합니다.
step5. 저장된 리스트를 데이터 프레임화 합니다.
이런 방식으로 크롤링은 진행되는데 위는 정말정말 간단한 예시이고 실제 웹 브라우저에서 크롤링을 하려면 정말 복잡합니다. 많은 양의 인터페이스 데이터들이 들어있고, 내가 원하는 데이터들이 어떤 태그에 저장되어 있는지, 그리고 같은 태그에 별로 쓸모없는 데이터들도 같이 있는지 등 여러가지를 고려해야합니다.