Python BeautifulSoup을 사용한 웹 스크래핑

웹 스크래핑이란 무엇입니까?



웹사이트에서 데이터를 추출하는 방법에는 주로 두 가지가 있습니다.
  • 웹사이트의 API를 사용합니다(있는 경우). 예를 들어 Facebook에는 Facebook에 게시된 데이터를 검색할 수 있는 Facebook Graph API가 있습니다.
  • 웹 페이지의 HTML에 액세스하고 여기에서 유용한 정보/데이터를 추출합니다. 이 기술을 웹 스크래핑 또는 웹 수확 또는 웹 데이터 추출이라고 합니다.
    이 블로그에서는 Beautiful Soup이라는 Python의 웹 스크래핑 프레임워크 구현을 사용하여 웹 스크래핑과 관련된 단계에 대해 설명합니다.

  • 시작하기:



    우리는 BeautifulSoup이라는 간단하고 강력한 라이브러리와 함께 Python을 스크래핑 언어로 사용할 것입니다.
  • Mac 사용자의 경우 OS X에 Python이 사전 설치되어 있습니다. 터미널을 열고 python --version을 입력합니다. Python 버전이 3.6(Shows for me)임을 확인해야 합니다.
  • Windows 사용자의 경우 공식 웹 사이트를 통해 Python을 설치하십시오.
  • 다음으로 Python용 패키지 관리 도구인 pip를 사용하여 BeautifulSoup 라이브러리를 가져와야 합니다.

  • 명령 프롬프트에 다음을 입력합니다.

    pip install BeautifulSoup4
    

    참고: 위의 명령줄 실행에 실패하면 각 줄 앞에 sudo를 추가해 보십시오.

    폐기 규칙 및 규정:



    스크랩을 시작하기 전에 사이트를 스크랩할 수 있는 몇 가지 규칙과 규정에 대해 알아야 합니다. 모든 사이트에서 데이터를 스크랩하는 것은 합법적이지 않으므로 임의의 사이트 스크래핑을 시작하기 전에 아래 사항을 읽으십시오. 따라서 아래 사항을 따르십시오.
  • 스크랩하기 전에 웹 사이트의 이용 약관을 확인해야 합니다. 데이터의 법적 사용에 대한 설명을 주의 깊게 읽으십시오. 일반적으로 스크랩한 데이터는 상업적 목적으로 사용해서는 안 됩니다.
  • 귀하의 프로그램(스팸이라고도 함)으로 너무 공격적으로 웹 사이트에서 데이터를 요청하지 마십시오. 웹 사이트가 손상될 수 있습니다. 프로그램이 합리적인 방식으로 작동하는지 확인하십시오(즉, 인간처럼 작동). 초당 하나의 웹 페이지에 대한 하나의 요청은 좋은 습관입니다.
  • 웹 사이트의 레이아웃은 수시로 변경될 수 있으므로 사이트를 다시 방문하고 필요에 따라 코드를 다시 작성해야 합니다.

  • 웹 스크래핑에 필요한 단계:



  • 액세스하려는 웹 페이지의 URL로 HTTP 요청을 보냅니다. 서버는 웹 페이지의 HTML 콘텐츠를 반환하여 요청에 응답합니다. 이 작업에서는 python-requests.Install 요청에 대해 타사 HTTP 라이브러리를 사용합니다. cmd를 사용합니다.
    pip install requests

  • HTML 콘텐츠에 액세스하면 데이터를 구문 분석하는 작업이 남습니다. 대부분의 HTML 데이터는 중첩되어 있기 때문에 단순히 문자열 처리만으로는 데이터를 추출할 수 없습니다. HTML 데이터의 중첩/트리 구조를 생성할 수 있는 파서가 필요합니다. 사용할 수 있는 많은 HTML 파서 라이브러리가 있지만 가장 진보된 라이브러리는 html5lib입니다. cmd를 사용하여 html5lib를 설치합니다.
    pip install html5lib
  • 이제 우리가 해야 할 일은 우리가 만든 구문 분석 트리, 즉 트리 순회를 탐색하고 검색하는 것입니다. 이 작업을 위해 다른 타사 Python 라이브러리인 Beautiful Soup을 사용합니다. HTML 및 XML 파일에서 데이터를 추출하기 위한 Python 라이브러리입니다. bs4 설치가 완료되었습니다.

  • 폐기가 작동하는 방식을 이해하려면 아래 이미지를 참조하십시오.

    Covid-19 데이터 폐기:



    우리는 사이트 worldometers에서 테이블 형태로 데이터를 추출할 것입니다. 코드는 설명과 함께 단계별로 아래에 표시됩니다.

    암호

    # importing modules
    import requests
    from bs4 import BeautifulSoup
    
    # URL for scrapping data
    url = 'https://www.worldometers.info/coronavirus/countries-where-coronavirus-has-spread/'
    
    # get URL html
    page = requests.get(url)
    soup = BeautifulSoup(page.text, 'html.parser')
    
    
    data = []
    
    # soup.find_all('td') will scrape every element in the url's table
    data_iterator = iter(soup.find_all('td'))
    # data_iterator is the iterator of the table
    
    # This loop will keep repeating till there is data available in the iterator
    while True:
        try:
            country = next(data_iterator).text
            confirmed = next(data_iterator).text
            deaths = next(data_iterator).text
            continent = next(data_iterator).text
    
            # For 'confirmed' and 'deaths', make sure to remove the commas and convert to int
            data.append((
                country,
                int(confirmed.replace(', ', '')),
                int(deaths.replace(', ', '')),
                continent
            ))
    
        # StopIteration error is raised when there are no more elements left to iterate through
        except StopIteration:
            break
    
    # Sort the data by the number of confirmed cases
    data.sort(key = lambda row: row[1], reverse = True)
    
    # create texttable object
    table = tt.Texttable()
    table.add_rows([(None, None, None, None)] + data) # Add an empty row at the beginning for the headers
    table.set_cols_align(('c', 'c', 'c', 'c')) # 'l' denotes left, 'c' denotes center, and 'r' denotes right
    table.header((' Country ', ' Number of cases ', ' Deaths ', ' Continent '))
    
    print(table.draw())
    

    코드의 출력은 다음과 같습니다.


    결론



    BeautifulSoup 라이브러리의 정말 좋은 점은 html5lib, lxml, html.parser 등과 같은 HTML 파싱 라이브러리 위에 구축된다는 것입니다. 따라서 BeautifulSoup 개체와 지정 파서 라이브러리를 동시에 생성할 수 있습니다.
    그래서 이것은 Python에서 웹 스크레이퍼를 만드는 방법에 대한 간단한 예였습니다. 여기에서 선택한 다른 웹사이트를 스크랩할 수 있습니다. 질문이 있는 경우 아래 댓글 섹션에 게시하십시오.

    아래 링크에서 볼 수 있는 내 다른 블로그:




    행복한 코딩! 건배.

    좋은 웹페이지 즐겨찾기