Python으로 웹 페이지의 모든 텍스트 찾기

Python으로 웹 페이지의 모든 텍스트 찾기

2022-10-19 last update

10 minutes reading python datascience
이 기사에서는 파이썬으로 웹사이트의 모든 텍스트를 찾는 작은 스크립트를 만들 것입니다.

이것을 구현하기 위해 Beautiful Soup and requests라는 놀라운 파이썬 라이브러리를 사용할 것입니다.

Beautiful Soup은 HTML 및 XML 파일에서 데이터를 가져오기 위한 Python 라이브러리입니다. 즐겨 찾는 파서와 함께 작동하여 구문 분석 트리를 탐색, 검색 및 수정하는 관용적 방법을 제공합니다. 그것은 일반적으로 프로그래머의 작업 시간 또는 일을 절약합니다.

시작하겠습니다...

먼저 가상 환경을 만듭니다.

mkdir TextExtractor && cd TextExtractor
pip3 venv .venv


그런 다음 이 환경을 활성화합니다.

source .venv/bin/activate


Beautiful Soup 라이브러리를 설치합니다

pip install beautifulsoup4==4.11.1


요청 라이브러리를 설치합니다.

pip install requests


그런 다음 main.py라는 파일을 만듭니다.

이 파일에서 먼저 BeautifulSoup 라이브러리를 가져오고 라이브러리를 요청합니다.

import requests 
from bs4 import BeautifulSoup


Medium.com과 같은 웹사이트의 예를 들어보겠습니다.

먼저 요청 라이브러리가 있는 웹사이트의 콘텐츠를 가져오는 함수를 만듭니다.

def get_page_content(page_url):
     response = requests.get(page_url)
     if response.status_code == 200:
          return response.content
     return None


우리는 이런 내용을 얻을 수 있습니다

content = get_page_content('https://medium.com/')


텍스트를 구문 분석하려면 다음과 같은 수프 개체를 만들어야 합니다.

soup = BeautifulSoup(html)


다음과 같은 방식으로 텍스트가 있는 모든 요소를 ​​찾습니다.

tags_with_text = soup.find_all(text=True)


그런 다음 텍스트 목록을 얻을 수 있습니다.

texts = [tag.text for tag in tags_with_text]


그러면 다음과 같은 텍스트 목록이 반환됩니다.

['', 'Medium – Where good ... find you.', '{"@context":"http:\\u...ght":168}}',...]


여기에서 우리가 원하지 않는 많은 스크립트 텍스트와 텍스트가 있음을 알 수 있습니다.

일부 태그는 무시해야 합니다.

TAGS_TO_IGNORE = ['script','style', 'meta']


이 하나의 라이너로 모든 텍스트를 얻습니다.

texts = [tag.text.strip() for tag in tags_with_text if (tag.text and tag.name not in TAGS_TO_IGNORE)]


페이지에서 모든 텍스트를 가져오는 함수를 만들 수 있습니다. 다음과 같습니다.

def get_texts_from_page(page_url):
    content = get_page_content(page_url)
    soup = BeautifulSoup(content, "html.parser")
    tags_with_text = soup.findAll(text=True)
    TAGS_TO_IGNORE = ['script','style', 'meta']
    texts = [tag.text.strip() for tag in tags_with_text if (tag.text and tag.name not in TAGS_TO_IGNORE)]

    return list(set(texts))


그리고 전체 파일 main.py

import requests
from bs4 import BeautifulSoup


def get_page_content(page_url):
    response = requests.get(page_url)
    if response.status_code == 200:
       return response.content
    return None


def get_texts_from_page(page_url):
    content = get_page_content(page_url)
    soup = BeautifulSoup(content, "html.parser")
    tags_with_text = soup.findAll(text=True)
    TAGS_TO_IGNORE = ['script','style', 'meta']
    texts = [tag.text.strip() for tag in tags_with_text if (tag.text and tag.name not in TAGS_TO_IGNORE)]
    return list(set(texts))

# USAGE
content = get_texts_from_page('https://medium.com/')


즐겨!

참조:
pybuddy.com