Python과 BeautifulSoup을 사용한 웹 스크래핑 소개
걱정할 필요 없습니다. BeautifulSoup이 바로 여기 있습니다. BeautifulSoup은 HTML을 스크랩하는 데 유용합니다. 온라인에서 분석할 데이터를 찾으면 BeautifulSoup을 사용하여 이해할 수 있는 구조로 변환할 수 있습니다. 에서 이름을 따온 이 Python 라이브러리를 사용하면 웹 사이트에서 쉽고 빠르게 정보를 가져와 DataFrame에 넣을 수 있습니다.
다운로드 옵션 없이 소스에서 데이터를 가져오는 간단한 예를 살펴보겠습니다. English Premier League table을 사용하여 20개 팀의 위치, 이름 및 포인트를 모두 가져옵니다.
전제 조건
1. 뷰티풀수프 설치하기
터미널을 열고 BeautifulSoup을 설치합니다.
pip install beautifulsoup4
2. 그런 다음 텍스트 편집기에서 가져오기:
from bs4 import BeautifulSoup
3. 웹사이트 데이터 가져오기 — 요청
Python에는 콘텐츠를 정말 쉽게 가져올 수 있는 요청 라이브러리가 있습니다. 우리가 해야 할 일은 라이브러리를 가져온 다음 GET하려는 URL을 입력하는 것입니다.
import requests
webpage_request = requests.get(‘https://www.premierleague.com/tables')
webpage = webpage_request.content
결과는 웹 페이지 변수의 전체 HTML 출력입니다.
b'<!DOCTYPE html>\n<html lang="en">\n<head>\n <meta name="twitter:title" content="Premier League Table, Form Guide & Season Archives"/>\n<meta name="keywords" content="Premier League, Football, Soccer, Official"/> .............
출력을 더 읽기 쉬운 HTML 형식으로 구문 분석할 수 있습니다.
soup = BeautifulSoup(webpage, 'html.parser')
수프 분석 결과:
<!DOCTYPE html>
<html lang="en">
<head>
<meta content="Premier League Table, Form Guide & Season Archives" name="twitter:title"/>
<meta content="Premier League, Football, Soccer, Official" name="keywords"/>
<meta content="website" property="og:type"/>
원하는 데이터를 얻는 데 한 단계 더 가까워졌지만 여전히 필요하지 않은 많은 데이터가 있습니다.
4. 페이지 속성을 찾습니다.
이제 웹 페이지로 돌아가서 개발자 탭을 사용하여 위치, 팀 및 점수를 얻는 데 필요한 HTML 요소를 가져와야 합니다. 마우스 오른쪽 버튼을 클릭한 다음 검사로 이동을 선택하여 브라우저 개발자 탭을 열 수 있습니다.
위치: HTML 클래스 'resultHighlight'에 있는 리그 위치를 먼저 찾고자 합니다.
팀: 'long' 클래스에 위치
Points: 클래스의 'points'에 위치
요소.
이제 요소/속성 위치, 팀 및 포인트가 무엇인지 알았으므로 BeautifulSoup의 .find_all() 메서드를 사용하여 찾고 있는 모든 데이터를 찾을 수 있습니다. find_all() 메서드는 HTML 요소/속성을 키로 사용하고 요소 이름을 값으로 사용하는 사전을 사용합니다.
league_positions = soup.find_all(attrs={‘class’: ‘resultHighlight’})
league_teams = soup.find_all(attrs={‘class’: “long”})
league_points = soup.find_all(attrs={‘class’: “points”})
5. 데이터 정리
엄청난! 필요한 요소를 얻었지만 여전히 HTML 형식입니다. 이 HTML 데이터를 목록으로 변환합니다(참고: 원하는 데이터 구조를 사용할 수 있음).
위치는 다음과 같이 인쇄됩니다.
[<span class="resultHighlight">
1
</span>, <span class="resultHighlight">
2
</span>, <span class="resultHighlight">
4
</span>
이것은 팀과 포인트에 대해서도 유사합니다. Alist comprehension가 이를 깔끔하게 정리합니다. 우리는 를 정렬하고 sorted() 및 set()을 사용하여 고유한 숫자만 가져온 다음 팀과 포인트를 1개의 목록으로 가져옵니다zip.
# We remove duplicate with a set, then turn it back into a list
position = sorted(
set(list(
[int(position.get_text().strip())
for position in league_positions][:21])))
teams = [team.get_text().strip() for team in league_teams][:21]
points = [point.get_text().strip() for point in league_points][1:21]
# Combine the teams with their points
premier_league_table = list(zip(teams, points))
6. DataFrame에 넣기
이제 작업할 두 개의 목록이 있습니다. 리그 위치에 대한 정수 중 1개와 팀 및 포인트의 압축 목록인 1개입니다.
참고: 위치에 대해 range()를 사용할 수 있었지만 BeautifulSoup으로 수행할 수 있는 방법을 보여주고 싶었습니다.
# Data into a DataFrame
import pandas as pd
print(“Final Premier League standing:”, end=(‘\n’))
df = pd.DataFrame(
premier_league_table,
index=position,
columns=[‘team’, ‘points’])
# Rename the index column to position
df.index.rename(“position”, inplace=True)
7. 데이터 내보내기
마지막으로 아래 명령을 사용하여 DataFrame을 .csv 파일로 내보냅니다. 현재 작업 디렉토리에서 파일을 찾을 수 있습니다(.py 파일과 동일).
# Export the data to csv
df.to_csv(“preimer_league_season_20–21.csv”)
아래 코드를 실행하고 파일을 git repohere에 추가했습니다.
4초도 걸리지 않았습니다!
결론
놀라운! 이제 BeautifulSoup을 사용하여 웹사이트를 데이터로 전환하는 방법의 기본 사항을 알게 되었습니다. 이제 웹에서 분석하고 싶은 몇 가지 흥미로운 데이터를 찾아 토끼굴이 얼마나 멀리 있는지 확인할 수 있습니다. 그러나 사이트 소유자를 존중해야 합니다.
읽어 주셔서 감사합니다
시야
자세한 내용은 plainenglish.io에서 확인하세요.
Reference
이 문제에 관하여(Python과 BeautifulSoup을 사용한 웹 스크래핑 소개), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/ktreharrison/an-introduction-to-web-scraping-with-python-and-beautifulsoup-2k9l텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)