#Day23 - 리퀘스트와 아름다운 수프를 이용한 사이트 스크랩 방법 1부
전제 조건
HTML 및 CSS 선택기에 대한 약간의 지식
패키지 설치
pip install beautifulsoup4, requests
뷰티풀수프 인스턴스 생성
Beautiful Soup은 HTML 파서입니다. 즉, 많은 HTML 코드가 포함된 문자열이 제공되면 예를 들어 필요한 특정 콘텐츠를 추출하는 데 도움이 될 수 있습니다.
등
HTML 코드가 포함된 문자열을 어떻게 얻습니까? 요청 라이브러리를 사용합니다. 요청 라이브러리를 사용하여 웹페이지에 요청하면 웹페이지의 HTML 콘텐츠를 문자열로 반환합니다.
import requests
from bs4 import BeautifulSoup
html = requests.get("https://www.worldometers.info/coronavirus/").text
print(html)
print(type(html))
출력은 Worldometer 홈 페이지의 HTML이 됩니다. 변수 'html'의 유형은 str입니다.
이제 BeautifulSoup의 인스턴스를 만들고 HTML 문자열을 인수로 전달합니다.
soup = BeautifulSoup(html, features= 'html.parser')
몇 가지 유용한 기능
예쁘다
print(soup.prettify())
이렇게 하면 들여쓰기가 있는 예쁜 형식으로 HTML 문자열이 인쇄됩니다.
태그의 첫 번째 인스턴스
찾기 기능을 사용하겠습니다. worldometer 페이지에서 'div' 태그의 첫 번째 인스턴스를 찾아봅시다.
print(soup.find("div"))
print("-x-x-x-x-x-x-x-")
print(soup.find("div").get_text())
첫 번째 인쇄 문은 div 태그의 첫 번째 인스턴스와 그 안에 있는 다른 모든 HTML 요소를 인쇄합니다. div 블록 내부의 텍스트만 원하는 경우 get_text() 함수를 사용할 수 있습니다.
태그의 모든 인스턴스 가져오기
div_elements = soup.find_all("div")
for element in div_elements:
print(element)
print("-x-x-x-x-x-x-x")
print(element.get_text())
break
이것은 페이지의 모든 div 요소로 구성된 iterable을 반환합니다. iterable을 반복하고 get_text() 함수를 사용하여 각 div 내부의 텍스트 콘텐츠를 가져올 수 있습니다. 위 코드의 출력과 이전 섹션의 코드가 어떻게 동일한지 확인하십시오. 이는 iterable의 첫 번째 요소가 find()에 의해 반환된 것과 동일한 div 블록이기 때문입니다.
CSS 클래스 및 ID 지정
find() 및 find_all() 함수는 다음 인수를 사용할 수 있습니다.
class_ = 클래스 이름
id = 아이디의 이름
코로나 바이러스 사례 수를 알아봅시다.
보시다시피 숫자는 클래스 이름이 "maincounter-number"인 div 블록 안에 있습니다. 다음 코드는 숫자를 반환합니다.
print( soup.find('div',class_='maincounter-number').get_text() )
div를 찾고 있음을 지정하고 클래스 이름 "maincounter-number"를 인수로 전달합니다. 다시 말하지만 get_text() 메서드를 사용하여 텍스트 내용, 즉 숫자를 가져옵니다.
이제 id를 사용하여 navbar 내부의 텍스트를 가져오도록 합시다.
id = "navbar-main"입니다.
print( soup.find('div',id = "navbar-main").get_text() )
보시다시피 코로나 바이러스 사례 수를 파악하려고 할 때와 매우 유사합니다. 유일한 차이점은 class_ 대신 id 값을 설정하는 것입니다.
CSS 선택기
요소와 클래스 이름 또는 ID도 결합할 수 있습니다. select() 함수는 find_all() 함수와 유사합니다. 몇 가지 CSS 선택자를 살펴보겠습니다. 아래는 구문입니다.
soup.find('css_selectors').get_text()
select() 함수를 사용하여 navbar 내부의 코로나 바이러스 사례 수와 텍스트를 가져오도록 합시다.
print( soup.select('div.maincounter-number')[0].get_text())
print( soup.select('div#navbar-main')[0].get_text())
select() 함수는 이터러블을 반환하므로 이를 반복하거나 인덱스를 사용하여 요소 내부의 텍스트를 가져와야 합니다.
다음 부분에서는 표를 긁어내고 Beautiful Soup을 사용하여 더 많은 사용 사례에 대해 논의할 것입니다.
Reference
이 문제에 관하여(#Day23 - 리퀘스트와 아름다운 수프를 이용한 사이트 스크랩 방법 1부), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/rahulbanerjee99/day23-how-to-scrape-websites-using-requests-and-beautiful-soup-part1-8e8텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)