Python 요청 페이지 매김

Abid Ullah 2023년6월21일 Python Python Requests
  1. 파이썬에서 페이지네이션이란?
  2. 다음 버튼으로 Python 페이지 매김
  3. 다음 버튼이 없는 파이썬 페이지네이션
  4. 무한 스크롤을 사용한 파이썬 페이지네이션
  5. 더 보기 버튼으로 페이지 매기기
Python 요청 페이지 매김

이 기사에서는 페이지 매김에 대해 알아보고 Python에서 페이지 매김과 관련된 문제를 극복하는 방법을 알아봅니다. 이 기사의 끝에 도달하면 Python 페이지 매김에 대해 배우고 문제를 처리하는 방법을 배울 수 있습니다.

파이썬에서 페이지네이션이란?

웹 애플리케이션을 사용할 때 표시되는 콘텐츠가 단일 페이지에 제한되고 강제로 맞춰지지 않는 것이 가장 중요합니다. 그래도 여러 페이지에 걸쳐 표시되어야 더 나은 사용자 경험에 도움이 될 수 있습니다.

콘텐츠를 여러 페이지에 걸쳐 퍼뜨리는 이 과정을 페이지 매김이라고 합니다. 페이지 매김의 개념을 구현할 때 총 페이지 수, 콘텐츠 유형, 논의 중인 주제의 범주적 표현 및 페이지에 대한 숫자 순서와 같은 요소를 고려해야 한다는 점을 명심해야 합니다.

다음 버튼으로 Python 페이지 매김

페이지 매김은 사용자가 보는 것, 즉 웹사이트의 프런트 엔드에 항상 제한되지는 않지만 때로는 백엔드에서 사용되는 API를 페이지 매김하는 것이 가장 중요합니다. 여러 Python API 및 모듈을 사용하여 페이지 매김 문제를 처리할 수 있습니다.

requests 모듈을 사용하여 시작하겠습니다. 이와 함께 웹 페이지에서 콘텐츠를 찾는 데 관심이 있는 경우 BeautifulSoup4를 사용할 것입니다.

또한 위에서 언급한 모듈에 대한 편리한 액세스를 제공하기 위해 lxml 라이브러리를 사용할 것입니다.

예제 코드:

pip install requests beautifulsoup4 lxml

위 라인은 beautifulsoup4 라이브러리를 통해 requests 모듈을 설치하는 데 도움이 됩니다.

import requests
from bs4 import BeautifulSoup

findurl = "http://books.toscrape.com/catalogue/category/books/fantasy_19/index.html"
getresponse = requests.get(findurl)
getsoup = BeautifulSoup(getresponse.text, "lxml")
footer_element = getsoup.select_one("li.current")
print(footer_element.text.strip())

출력:

Page 1 of 3

이전 코드 스니펫은 코드에 제공된 웹페이지 URL에서 바닥글을 캡처하는 데 도움이 됩니다. 요구 사항에 따라 URL을 변경할 수 있습니다.

requests 라이브러리는 URL에서 get 요청을 보냅니다.

soup 개체의 경우 CSS 선택기를 사용하고 있습니다. 예를 들어 다른 요소로 이동하려면 soup.select_one(name)에 이름을 입력하면 됩니다.

위의 코드는 탐색을 위한 다음 버튼을 포함하는 웹 페이지용이었습니다. 이 시나리오와는 별도로 무한 스크롤추가 버튼 로드를 사용하는 웹 사이트에 대해 다음 버튼 없이 페이지 매김을 수행할 수도 있습니다.

참고: 원하는 웹 사이트에서 F12를 누른 다음 필요한 요소에 대한 마크업을 검사하여 위의 코드에서 사용한 모든 개체 이름을 얻습니다. 예를 들어:

웹사이트 검사 방법

다음 버튼이 없는 파이썬 페이지네이션

일부 웹사이트에서는 다음 버튼 대신 1,2,3,4 등과 같은 숫자를 사용하여 다른 페이지 사이를 스크롤합니다. 이렇게 하면 사용자가 여러 페이지 사이를 탐색하기가 훨씬 더 쉬워집니다.

이 경우 첫 번째 페이지에서 데이터를 검색한 다음 루프를 사용하여 탐색을 시도합니다.

예제 코드:

# Handling pages with the Next button
import requests
from bs4 import BeautifulSoup
from urllib.parse import urljoin


def process_pages():
    get_url = "https://www.gosc.pl/doc/791526.Zaloz-zbroje"
    response = requests.get(get_url)
    soup = BeautifulSoup(response.text, "lxml")
    page_link_el = soup.select(".pgr_nrs a")
    # process the first page
    for link_el in page_link_el:
        link = urljoin(get_url, link_el.get("href"))
        response = requests.get(link)
        soup = BeautifulSoup(response.text, "lxml")
        print(response.url)
        # process remaining pages


if __name__ == "__main__":
    process_pages()

출력:

https://www.gosc.pl/doc/791526.Zaloz-zbroje/2
https://www.gosc.pl/doc/791526.Zaloz-zbroje/3
https://www.gosc.pl/doc/791526.Zaloz-zbroje/4

무한 스크롤을 사용한 파이썬 페이지네이션

이름에서 알 수 있듯이 이러한 유형의 페이지 매김에서는 다음 버튼이나 페이지 번호가 없지만 필요한 콘텐츠를 보기 위해 계속 스크롤합니다.

이러한 페이지 매김의 간단한 예는 모든 전자 상거래 웹 사이트가 될 수 있습니다. 한 번에 특정 수의 제품이 표시되고 아래로 스크롤하면 다음 제품이 표시됩니다.

이러한 시나리오에서는 여러 페이지 URL을 처리할 필요가 없다는 점을 명심해야 합니다.

API에 대한 비동기 호출은 이동하면서 더 많은 콘텐츠를 얻는 데 도움이 됩니다.

더 보기 버튼으로 페이지 매기기

이 페이지 매김 방법은 무한 스크롤 방법과 유사하지만 다음 페이지로 이동하는 방법을 알고 싶을 때만 다릅니다.

이 경우 추가 로드 버튼을 클릭할 때마다 계속 감소하는 완료해야 할 특정 수의 요청이 있습니다. 예를 들어 웹사이트의 총 이미지 수는 500개이고 한 번에 30개의 이미지가 표시됩니다.

따라서 추가 로드 버튼을 클릭할 때마다 다음 30개의 이미지가 표시되고 카운터는 총 500개의 이미지에서 해당 30개를 뺍니다. 더 나은 이해를 위해 아래 예를 살펴보겠습니다.

예제 코드:

import requests
from bs4 import BeautifulSoup

url = "http://smarthistory.org/wp-json/smthstapi/v1/objects?tag=938&page={}"
null = 0
page_counter = 1
while True:
    getresponse = requests.get(url.format(page_counter), headers=null)
    data = getresponse.json()
    # Process data
    # ...
    print(getresponse.url)  # only for debug
    if data.get("remaining") and int(data.get("remaining")) > 0:
        page_counter += 1
    else:
        break

출력:

https://smarthistory.org/wp-json/smthstapi/v1/objects?tag=938&page=1
https://smarthistory.org/wp-json/smthstapi/v1/objects?tag=938&page=2
https://smarthistory.org/wp-json/smthstapi/v1/objects?tag=938&page=3
https://smarthistory.org/wp-json/smthstapi/v1/objects?tag=938&page=4
https://smarthistory.org/wp-json/smthstapi/v1/objects?tag=938&page=5
https://smarthistory.org/wp-json/smthstapi/v1/objects?tag=938&page=6
https://smarthistory.org/wp-json/smthstapi/v1/objects?tag=938&page=7
...

위의 코드는 사용 가능한 페이지 끝에 도달할 때까지 동일한 URL을 계속 인쇄하고 페이지 번호를 증가시킵니다. 위 코드의 경우 총 페이지 수는 34입니다.

이 기사가 Python의 페이지 매김 개념을 이해하는 데 도움이 되기를 바랍니다.

튜토리얼이 마음에 드시나요? DelftStack을 구독하세요 YouTube에서 저희가 더 많은 고품질 비디오 가이드를 제작할 수 있도록 지원해주세요. 구독하다
작가: Abid Ullah
Abid Ullah avatar Abid Ullah avatar

My name is Abid Ullah, and I am a software engineer. I love writing articles on programming, and my favorite topics are Python, PHP, JavaScript, and Linux. I tend to provide solutions to people in programming problems through my articles. I believe that I can bring a lot to you with my skills, experience, and qualification in technical writing.

LinkedIn

관련 문장 - Python Requests