Beautiful Soup을 사용하여 Python으로 웹 스크래핑 가이드
게시 됨: 2020-06-23Python을 사용한 웹 스크래핑 소개:
웹 스크래핑과 관련하여 일부 프로그래밍 언어가 다른 언어보다 선호됩니다. 그 중 가장 인기 있는 것은 Python입니다. 더 부드러운 학습 곡선으로 인해 배우기 가장 쉬운 언어 중 하나일 뿐만 아니라 수많은 타사 패키지로 이어진 대규모 개발자 지원이 있는 언어라는 장점도 있습니다. 이러한 패키지는 핵심 Python으로 수행하기 어려울 수 있는 여러 기능에 사용할 수 있습니다. 몇 가지 일반적인 예는 이미지 처리 또는 컴퓨터 비전의 경우 OpenCV를 사용하고 기계 학습의 경우 TensorFlow를 사용하며 그래프를 그리는 데 MatplotLib를 사용하는 것입니다. 웹 스크래핑과 관련하여 가장 일반적으로 사용되는 라이브러리 중 하나는 BeautifulSoup입니다. 이 라이브러리는 인터넷에서 특별히 데이터를 스크랩하지는 않지만 웹 페이지의 HTML 파일을 얻을 수 있는 경우 특정 데이터 포인트를 추출하는 데 도움이 될 수 있습니다. 일반적으로 라이브러리는 XML 및 HTML 문서에서 데이터 포인트를 추출하는 데 사용됩니다.
BeautifulSoup은 어떻게 작동합니까?
Python으로 코드를 작성하기 전에 BeautifulSoup이 어떻게 작동하는지 이해해야 합니다. 웹 페이지의 HTML 콘텐츠를 추출하여 html_obj와 같은 변수에 저장하면 코드 한 줄만으로 이를 BeautifulSoup 객체로 변환할 수 있습니다.
| 수프_obj = BeautifulSoup(html_obj, 'html.parser') |
여기서 html_obj는 HTML 데이터이고, stew_obj는 가져온 bs 개체이고 "html.parser"는 변환을 수행하는 데 사용된 파서입니다. 수프_obj라고 하는 bs 객체가 있으면 탐색이 매우 쉽고, 탐색이 충분히 간단하므로 데이터 추출도 간단해집니다. 예를 들어 보겠습니다. 전자 상거래 웹사이트의 모든 페이지에 있는 제품 제목이라는 데이터 요소를 가져와야 한다고 가정해 보겠습니다. 이제 해당 웹 사이트에서 단일 HTML 제품 페이지를 다운로드하고 각 페이지에 id가 productTitle인 span 유형의 요소에 언급된 제품 이름이 있다는 것을 깨달았습니다. 그렇다면 1000개의 제품 페이지에서 이 데이터를 가져오는 방법은 무엇입니까? 글쎄, 당신은 각 페이지에 대한 HTML 데이터를 가져오고 이러한 방식으로 데이터 포인트를 가져옵니다.
| 수프.findAll('span', attrs={'id': 'productTitle'})의 범위: name_of_product = spans.text.strip() |
이것은 특정 태그 요소 사이에 있는 텍스트 데이터를 가져오는 방법이지만 태그의 속성에서도 데이터를 가져올 수 있습니다.

BeautifulSoup을 사용하여 웹 페이지에서 데이터를 스크랩하는 방법은 무엇입니까?
이제 bs 객체가 어떻게 순회되는지에 대한 기본적인 이해를 얻었으므로 코드를 작성하고 작동 방식을 살펴보겠습니다. 아래 코드 스니펫을 사용하면 미국에 기반을 둔 선도적인 부동산 시장인 Zillow에서 데이터를 매우 쉽게 스크랩할 수 있습니다. 이 코드를 실행하고 목록의 URL을 입력하여 JSON 형식의 출력 데이터를 얻을 수 있습니다. 코드를 한 줄씩 이해합시다. 먼저 컴퓨터에 Python 3.7 이상이 설치되어 있는지 확인하십시오. pip를 사용하여 BeautifulSoup을 설치합니다. 다른 모든 패키지는 Python과 함께 사전 번들로 제공되므로 설치할 필요가 없습니다. 완료되면 Atom 또는 VS Code와 같은 코드 편집기를 설치하면 준비가 완료됩니다. 코드를 이해하는 것이 중요하므로 첫 번째 줄부터 시작하겠습니다. 특정 기능을 위해서는 4개의 import 문이 필요합니다. 다음으로 "ctx"로 시작하는 세 줄이 있습니다. 이는 특히 코드를 통해 웹사이트에 액세스할 때 직면할 수 있는 SSL 인증서 오류를 무시하기 위한 것입니다. 다음으로 웹사이트 URL을 사용자의 입력으로 받습니다. 여기에서 URL을 하드코딩하거나 여러 URL의 배열을 가질 수도 있습니다.
웹 스크래핑 프로세스:
다음으로 urllib의 Request 기능을 이용하여 웹페이지에 접속합니다. 헤더에 User-Agent를 추가하여 웹사이트가 브라우저를 사용하고 있다고 믿도록 하십시오. 이렇게 하는 이유는 웹사이트가 코드가 아닌 브라우저에서 액세스하도록 되어 있기 때문에 웹사이트가 사용자를 포착할 경우 사용자의 IP를 차단할 수 있기 때문입니다. 이 작업이 완료되면 모든 기본 단계를 완료하고 다음으로 HTML 개체를 bs 개체로 변환한 다음 utf-8 형식으로 예쁘게 만들어 웹 페이지의 특수 문자와 기호를 처리합니다. 이 작업이 완료되면 bs 객체를 구문 분석하여 제목, 짧은 세부 정보 및 기타 속성을 추출합니다. 보시다시피 속성 유형이 application/ld+json인 스크립트 태그에는 모두 JSON 형식으로 저장된 여러 데이터 포인트가 있습니다. 또한 i==0 및 i==1 검사를 사용하는 것을 볼 수 있습니다. 한 페이지에 이와 같은 두 개의 스크립트 태그(동일한 속성을 가짐)가 있기 때문입니다. 첫 번째 태그는 일부 데이터 포인트를 제공하고 두 번째 태그는 나머지를 제공합니다. 모든 데이터 포인트를 추출한 후에는 JSON 파일에 저장하고 그대로 저장할 수 있습니다. 원하는 경우 데이터를 저장하거나 사이트에 업로드하거나 API를 사용할 수도 있습니다.

| json 가져오기 SSL 가져오기 urllib.request에서 가져오기 요청, urlopen bs4 import BeautifulSoup에서 # SSL 인증서 오류 무시 # Zillow 목록 URL을 입력으로 사용 # 웹사이트가 브라우저를 사용하고 있다고 믿게 만듭니다. # HTML 페이지 -> BeautifulSoup 객체 수프 = BeautifulSoup(webpage, 'html.parser') # 속성 목록의 다른 데이터 포인트 추출 수프.findAll('meta', attrs={'name': 'description'})의 메타용: div의 경우 수프.findAll('div', attrs={'class': 'character-count-truncated'}): enumerate(soup.findAll('script', open('house_listing_data.json', 'w')을 outfile로 사용: 파일로 open('house_listing_data.html', 'wb') 사용: print('———-데이터 추출이 완료되었습니다. json 파일을 확인하세요.———-') |
출력 JSON은 다음과 같아야 합니다.
| { "details_long": { "no_of_rooms": 3, "floor_size_in_sqrft": "1,392" }, "주소": { "거리": "22516 조안 박사", "지역": "캘리포니아", "지역": "MD", "우편번호": "20619" }, "제목": "22516 Joan Dr, California, MD 20619 | MLS #MDSM167670”, “details_short”: “22516 Joan Dr , California, MD 20619-3175는 $150,000에 매물로 나와 있는 단독 주택입니다. 1,392평방피트의 집은 침대 3개, 욕실 2.0개 건물입니다. Zillow에서 22516 Joan Dr 집의 사진 40장을 찾으세요. Zillow에서 더 많은 부동산 세부 정보, 판매 내역 및 Zestimate 데이터를 확인하십시오. MLS # MDSM167670”, "price_in_dollars": 150000, "inage": "https://photos.zillowstatic.com/p_h/ISn2oi3glpvdv10000000000.jpg" } |
결론:
웹 스크래핑 요구 사항에 BeautifulSoup을 사용하는 것은 처음에 HTML 페이지를 수동으로 분석하고 타겟팅해야 하는 태그를 결정할 수 있는 한 쉬울 수 있습니다. 동적 콘텐츠가 없고 로그인 페이지 뒤에 있지 않은 페이지에서 작동할 수 있습니다. 더 복잡한 웹 페이지의 경우 더 복잡한 도구가 필요합니다. PromptCloud 팀은 데이터를 활용하고 데이터 기반 결정을 내리려는 기업을 돕습니다. 클라우드에서 자주 실행되는 완전 자동화된 웹 스크래핑 엔진을 설정할 수 있을 뿐만 아니라 기업이 데이터를 분석하여 추세 및 기타 유용한 정보를 추출할 수 있도록 지원합니다.
