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의 페이지 매김 개념을 이해하는 데 도움이 되기를 바랍니다.
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