본문 바로가기
Programming/Python

[Python] bs4 html parsing

by BTC_톰캣 2024. 1. 22.

베하 오늘은 파이썬과 bs4를 사용하여 html parsing을 하는 방법에 대해 알아보겠습니다.

 

bs4는 다음과 같은 주요 기능을 제공합니다.

  • HTML 및 XML 문서의 파싱 및 구문 분석
  • 태그, 속성, 텍스트 등의 요소에 대한 액세스
  • CSS 선택자를 사용하여 요소 선택
  • 데이터 추출 및 저장

 

bs4는 다양한 웹 스크래핑 작업에 활용할 수 있습니다. 예를 들어, 다음과 같은 작업을 수행할 수 있습니다.

  • 뉴스 기사의 제목 및 본문 추출
  • 상품 목록의 가격 및 재고 수량 추출
  • 소셜 미디어의 게시물 및 댓글 추출

다음은 실제 예제 코드입니다.

저는 이마트 사이트의 과일 상품에 대한 이름과, 가격 정보를 스크랩핑 해보겠습니다.

 

이마트 사이트의 과일 상품들의 목록입니다.

 

다음은 예제 코드입니다.

from bs4 import BeautifulSoup
import requests

headers={
    "User-Agent": "Yeti",
    "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8"
}


response = requests.get("https://emart.ssg.com/disp/category.ssg?dispCtgId=6000213114",headers=headers)

soup = BeautifulSoup(response.text,"html.parser")


product_title_list = soup.find_all("span", class_="mnemitem_goods_tit")
prdouct_price_list = soup.find_all("em", class_="ssg_price")

for title,price in zip(product_title_list,prdouct_price_list) :
    print(title.text)
    print(price.text)

 

이마트 사이트의 robots.txt 파일의 내용에 agent는 yeti를 사용하는 것을 허용 한다고 적혀 있기 때문에 

header부분에서 agent를 Yeti로 설정 해주었습니다.

 

파이썬 모듈에서 get 요청을 보낼 수 있는 모듈인 requests 모듈을 이용하여 이마트의 과일상품 리스트가 나오는 사이트의 url을 적어주었습니다.

 

사이트의 response를 변수에 저장한뒤

bs4의 BeautifulSoup객체를 soup이라는 변수에 생성합니다.

 

개발자 모드(f12)를 이용해 원하는 정보의 선택자를 찾고

 

find_all 함수를 이용하여 해당 선택자의 리스트를 추출합니다.

product_title_list를 출력한 결과이며 

[<span class="mnemitem_goods_tit">[SSG상품권증정이벤트][1/22 순차출고] 상주감도가 반건시 상주 곶감 선물세트 800g(20개입)/보자기동봉</span>, <span class="mnemitem_goods_tit">[SSG상품권증정이벤트][1/22 순차출고][상주감도가]알찬1호 건시 상주 곶감 선물세트 800g(20-24개입)/보자기동봉</span>, <span class="mnemitem_goods_tit">[SSG상품권증정이벤트][바로배송] 제주 한라봉 선물세트 2.5kg(11-12과)</span>, <span class="mnemitem_goods_tit">[SSG상품권증정이벤트][1/22 순차출고][맛딜] 제주 한라봉 선물세트 2.5kg(11-12과)</span>, <span class="mnemitem_goods_tit">[SSG상품권증정이벤트][바로배송] 제주 한라봉 선물세트 2.5kg(7-10과)</span>, <span class="mnemitem_goods_tit">[SSG상품권증정이벤트][1/22 순차출고][맛딜] 제주 한라봉 선물세트 2.5kg(7-10과)</span>, <span class="mnemitem_goods_tit">[SSG상품권증정이벤트][1/22 순차출고][맛딜] 청도곶감 반건시 정성 1호(반건시55g내외x18개입)</span>, <span class="mnemitem_goods_tit">[SSG상품권증정이벤트][1/22 순차출고] 상주감도가 반건시 상주 곶감 선물세트 1.3kg(30개입)</span>, <span class="mnemitem_goods_tit">[SSG상품권증정이벤트][1/22 순차출고][상주감도가]반건시 상주 곶감 선물세트 1kg(20개입)/보자기동봉</span>, <span class="mnemitem_goods_tit">[SSG상품권증정이벤트][1/22(월)순차출고]소담 사과 배 선물세트 7호[사과4과+배4과] 3kg</span>, <span class="mnemitem_goods_tit">제스프리 제주골드키위 세트 2kg (22입)</span>, <span class="mnemitem_goods_tit">저탄소인증 사과/배 혼합세트 (12과/5.7kg)</span>, <span class="mnemitem_goods_tit">달짝이 토마토 750g/팩</span>, <span class="mnemitem_goods_tit">무농약 한단딸기 500g/팩 (특)</span>, <span class="mnemitem_goods_tit">알뜰사과 3kg [랜덤과/300g이상~550g이하]</span>, <span class="mnemitem_goods_tit">[SSG상품권증정이벤트][발송일선택] 나주배 선물세트 프리미엄 7.5kg (9-10과) 금보자기 별도동봉</span>, <span class="mnemitem_goods_tit">엄마만점 딸기 동결건조칩 13g</span>, <span class="mnemitem_goods_tit">[SSG상품권증정이벤트][발송일선택] 사과배 혼합 선물세트 2호 6kg (배6,사과6) 금보자기 별도동봉</span>, <span class="mnemitem_goods_tit">[과테말라산] 치키타 바나나 (1.2kg내외)</span>, <span class="mnemitem_goods_tit">저탄소인증 시나노골드사과 4~7입/봉 (1.3kg)</span>, <span class="mnemitem_goods_tit">더달콤 스테비아 대추방울토마토 550g/팩</span>, <span class="mnemitem_goods_tit">대추방울토마토 1kg/팩</span>, <span class="mnemitem_goods_tit">[칠레산] 체리 600g/팩</span>, <span class="mnemitem_goods_tit">하우스 돌빌레 감귤 1.4kg/팩</span>, <span class="mnemitem_goods_tit">[에콰도르산] 하루과일 바나나/팩 (420g내외)</span>, <span class="mnemitem_goods_tit">하우스감귤 1.4kg/팩</span>, <span class="mnemitem_goods_tit">요거트 건포도 20g*10입</span>, <span class="mnemitem_goods_tit">[필리핀산] 고당도 감숙왕 바나나 (1.2kg내외)</span>, <span class="mnemitem_goods_tit">보조개사과 6~14입/봉 (2.5kg내외)</span>, <span class="mnemitem_goods_tit">[칠레산] 생블루베리 310g/팩</span>, <span class="mnemitem_goods_tit">건망고 슬라이스 250g</span>, <span class="mnemitem_goods_tit">[필리핀산] 스위티오 바나나 1kg 내외</span>, <span class="mnemitem_goods_tit">방울토마토 600g/팩</span>, <span class="mnemitem_goods_tit">[에콰도르산] 바나밸리 바나나 (1.2kg내외)</span>, <span class="mnemitem_goods_tit">다크초코 건포도 20g*10입</span>, <span class="mnemitem_goods_tit">돌빌레슈타인 하우스감귤 1.4kg/팩</span>, <span class="mnemitem_goods_tit">제스프리 제주 골드키위/팩 (900g내외)</span>, <span class="mnemitem_goods_tit">완숙토마토 5~8입/팩 (1.1kg)</span>, <span class="mnemitem_goods_tit">바나나칩 500g</span>, <span class="mnemitem_goods_tit">[멕시코산] 라임 4~6입/팩 (530g내외)</span>, <span class="mnemitem_goods_tit">딸기 500g/팩</span>, <span class="mnemitem_goods_tit">친환경 토마토 900g/팩</span>, <span class="mnemitem_goods_tit">청포도향 요거트 레이즌 20g*10입</span>, <span class="mnemitem_goods_tit">김제 금실딸기 500g/팩 (대)</span>, <span class="mnemitem_goods_tit">딸기 750g/박스</span>, <span class="mnemitem_goods_tit">[치키타] 과테말라 바나나 (1.2kg/봉)</span>, <span class="mnemitem_goods_tit">샤인머스캣 1.5kg/박스 (2~3송이)</span>, <span class="mnemitem_goods_tit">토마주르토마토 750g/팩</span>, <span class="mnemitem_goods_tit">[미국산] 냉동 블루베리 1.5kg/봉</span>, <span class="mnemitem_goods_tit">[냉동] 유기농 블루베리 700g</span>, <span class="mnemitem_goods_tit">무농약 딸기 750g</span>, <span class="mnemitem_goods_tit">프리미엄 탑감귤 1kg/팩</span>, <span class="mnemitem_goods_tit">[페루산] 순 유기농 바나나 1묶음 (1.1kg 내외)</span>, <span class="mnemitem_goods_tit">[페루산] 씨없는 적포도 800g/팩</span>, <span class="mnemitem_goods_tit">친환경 제주 참다래 4~6입x2팩 (900g내외)</span>, <span class="mnemitem_goods_tit">[미국산] 레몬 1개 (150g내외)</span>, <span class="mnemitem_goods_tit">애플토마토 600g/팩</span>, <span class="mnemitem_goods_tit">레드향 1.2kg/봉</span>, <span class="mnemitem_goods_tit">한라봉 1.2kg/봉</span>, <span class="mnemitem_goods_tit">옐로리타 토마토 600g/팩</span>, <span class="mnemitem_goods_tit">I`mperfect 당도선별 못난이사과 2.5kg (봉)</span>, <span class="mnemitem_goods_tit">더달콤 스테비아 대추방울 토마토 550g (팩)</span>, <span class="mnemitem_goods_tit">[페루산] 요리하기 좋은 반쪽 아보카도 1kg (500gx2개입)</span>, <span class="mnemitem_goods_tit">SSG 옥종 한단딸기 500g</span>, <span class="mnemitem_goods_tit">신고배 2입/봉 (1.4kg)</span>, <span class="mnemitem_goods_tit">제주 그린키위/팩 (1kg내외)</span>, <span class="mnemitem_goods_tit">제주 금귤 750g/팩</span>, <span class="mnemitem_goods_tit">반건시 10입/팩 (특/400g내외)</span>, <span class="mnemitem_goods_tit">찰토마토 1.2kg/팩</span>, <span class="mnemitem_goods_tit">건블루베리 350g</span>, <span class="mnemitem_goods_tit">상주곶감 (특) 18입/팩 (630g내외)</span>, <span class="mnemitem_goods_tit">SSG 톡톡 대추방울토마토 500g/팩</span>, <span class="mnemitem_goods_tit">[미국산] 레몬 7~10입/봉 (1.2kg)</span>, <span class="mnemitem_goods_tit">무지개 방울토마토 600g/팩</span>, <span class="mnemitem_goods_tit">[필리핀산] Dole 컷파인애플 540g</span>, <span class="mnemitem_goods_tit">[페루산] 냉동딸기 1.5kg</span>, <span class="mnemitem_goods_tit">친환경 방울토마토 600g/팩</span>, <span class="mnemitem_goods_tit">까망 애플수박 3kg미만(1.5kg~3kg)</span>, <span class="mnemitem_goods_tit">[필리핀산] Dole 바나나 1kg내외</span>, <span class="mnemitem_goods_tit">불로초 감귤 1.5kg/박스</span>, <span class="mnemitem_goods_tit">GAP 죽장사과 4~6입/봉 (1.3kg내외)</span>, <span class="mnemitem_goods_tit">[베트남산] 스위트 망고 1kg</span>, <span class="mnemitem_goods_tit">노랑달콤 옐로리타 방울토마토 500g/팩</span>, <span class="mnemitem_goods_tit">대추방울토마토 750g (팩)</span>, <span class="mnemitem_goods_tit">천혜향 1.2kg/봉</span>, <span class="mnemitem_goods_tit">데일리 당도선별 사과 1.5kg</span>, <span class="mnemitem_goods_tit">I`mperfect 당도선별 못난이사과 2kg (봉)</span>, <span class="mnemitem_goods_tit">[당도선별] 하우스감귤 3kg (박스)</span>, <span class="mnemitem_goods_tit">유명산지 샤인머스켓 2kg (박스)</span>, <span class="mnemitem_goods_tit">단감 4~5입/봉 (특대/1kg내외)</span>, <span class="mnemitem_goods_tit">친환경 감귤 2kg/박스</span>, <span class="mnemitem_goods_tit">무농약 생긴대로 딸기 (상) 900g</span>, <span class="mnemitem_goods_tit">후레쉬컷 파인애플 400g/팩 (조각형)</span>, <span class="mnemitem_goods_tit">SSG 프리미엄 알이 큰 설향딸기 500g/팩</span>, <span class="mnemitem_goods_tit">무농약 딸기 500g/팩</span>, <span class="mnemitem_goods_tit">스위티오 필리핀 바나나 (1.2kg/봉)</span>

 

해당 리스트를 for문을 이용하여 안의 텍스트만 출력 해보면 원하는 값들이 출력되는것을 볼 수 있습니다.

 

그럼 지금까지 파이썬과 bs4를 이용하여 사이트에서 원하는 정보를 스크랩핑하는 방법에 대해 알아보았습니다.

감사합니다!

'Programming > Python' 카테고리의 다른 글

[Python] Requests  (0) 2024.01.29
[Django] {%block%} 태그  (0) 2024.01.15
virtualenv 명령어 실행 또는 가상환경이 생성되지 않는 경우  (0) 2024.01.05
Python Pandas  (0) 2024.01.02
Python Flask 란?  (0) 2023.12.22

댓글