웹 스크래핑 영역에서 무한 스크롤을 사용하는 웹 페이지의 데이터에 액세스하고 추출하는 것은 개발자에게 어려울 수 있습니다. 많은 웹사이트에서는 이 기술을 사용하여 더 많은 콘텐츠를 동적으로 로드하기 때문에 사용 가능한 모든 데이터를 한 번에 긁어내기가 어렵습니다. 좋은 해결책은 추가 콘텐츠를 표시하기 위해 "더 보기" 버튼을 클릭하는 등의 사용자 작업을 시뮬레이션하는 것입니다.
이 튜토리얼에서는 Zenrows 오픈 소스 웹 스크래퍼를 활용하여 무한 스크롤로 페이지에서 제품 데이터를 스크래핑하는 방법을 탐구하고, 웹 페이지의 콘텐츠에 액세스하는 스크래퍼 봇을 구축하고, Zenrows를 사용하여 더 많은 제품을 생성합니다. 무한 스크롤을 시뮬레이션하려면 "더 보기" 버튼을 클릭하여 페이지를 엽니다.
이 튜토리얼을 따르려면 다음이 필요합니다.
Zenrows 계정에 가입하고 전제 조건을 갖추고 나면 다음 단계는 웹 페이지에서 콘텐츠에 액세스하는 것입니다. 이 튜토리얼에서는 https://www.scrapingcourse.com/button-click 페이지를 사용하게 됩니다.
또한 ZenRows SDK를 사용하여 동적 페이지를 스크래핑하고 다양한 렌더링 및 봇 방지 조치를 처리합니다. 시작해 보세요:
필요한 라이브러리 설치:
원하는 IDE의 터미널을 열고 코드를 실행하여 ZenRows Python SDK를 설치하세요.
pip install zenrows python-dotenv
대시보드로 이동하여 아래 이미지처럼 화면 오른쪽 상단에 있는 API 키를 복사하세요.
다음으로 app.py 및 .env 페이지를 생성한 후 app.py 파일에 아래 코드를 추가하세요. 그리고 .env 파일의 API_KEY 변수에 API 키를 추가하세요.
# Import ZenRows SDK from zenrows import ZenRowsClient from dotenv import load_dotenv import os # Load environment variables load_dotenv() # Initialize ZenRows client with your API key client = ZenRowsClient(os.getenv("API_KEY")) # URL of the page you want to scrape url = "https://www.scrapingcourse.com/button-click" # Set up initial parameters for JavaScript rendering and interaction base_params = { "js_render": "true", "json_response": "true", "premium_proxy": "true", "markdown_response": "true" }
위 코드는 API 키를 사용하여 Zenrow SDK를 시작합니다. 스크래핑할 웹페이지에 대한 URL 변수를 설정하고 필요한 매개변수에 대한 base_params 변수를 설정합니다. 다음 명령을 사용하여 스크레이퍼를 실행할 수 있습니다.
python app.py
현재 페이지의 제품만 포함된 페이지의 HTML 표현을 제공합니다.
.
언제든지 한 단계 더 나아갈 수 있습니다.
스크레이퍼를 향상시키려면 웹페이지 하단의 "더 보기" 버튼과 상호 작용하고 더 많은 제품을 로드하는 추가 매개변수를 구현할 수 있습니다.
필요한 패키지를 포함하도록 가져오기를 수정하고 제품 응답을 필터링하는 parse_products 함수를 추가하는 것부터 시작하세요.
pip install zenrows python-dotenv
다음으로 지정된 제한(max_products)까지 여러 페이지에서 제품 정보를 지속적으로 스크랩하는 while 루프를 만듭니다. 이 튜토리얼에서는 제한을 50으로 설정합니다.
# Import ZenRows SDK from zenrows import ZenRowsClient from dotenv import load_dotenv import os # Load environment variables load_dotenv() # Initialize ZenRows client with your API key client = ZenRowsClient(os.getenv("API_KEY")) # URL of the page you want to scrape url = "https://www.scrapingcourse.com/button-click" # Set up initial parameters for JavaScript rendering and interaction base_params = { "js_render": "true", "json_response": "true", "premium_proxy": "true", "markdown_response": "true" }
이 루프는 지정된 한도에 도달할 때까지 "추가 로드" 버튼 클릭을 시뮬레이션하여 제품을 계속 폐기합니다.
상품정보 파싱
마지막으로 이전 단계에서 스크랩한 제품 정보를 구문 분석할 수 있습니다. 각 상품에 대해 상품명, 이미지 링크, 가격, 상품 페이지 URL을 추출합니다. 다음과 같이 모든 제품의 총 가격을 계산하고 결과를 인쇄할 수도 있습니다.
python app.py
응답을 내보낸 csv 파일로 구문 분석하려는 경우 다음 몇 단계에서는 스크랩한 제품 정보를 가져와 CSV 파일로 내보내는 방법을 배우게 됩니다.
먼저 Python에 내장된 CSV 모듈을 사용하여 제품 데이터를 저장해야 합니다. 이 경우 각 제품에는 이름, 이미지_링크, 가격, 제품_URL이라는 네 가지 주요 속성이 있습니다.
이를 CSV의 헤더로 사용하고 스크랩된 제품 목록을 반복한 다음 각 제품을 CSV 파일의 행으로 작성할 수 있습니다.
import re import json import time def parse_products(response_json): try: data = json.loads(response_json) md_content = data.get('md', '') pattern = r'\[!\[([^\]]+)\]\(([^\)]+)\)\*\n([^\\n]+)\*\n\*\n$(\d+)\]\(([^\)]+)\)' matches = re.findall(pattern, md_content) products = [] for match in matches: product = { 'name': match[0], 'image_link': match[1], 'price': int(match[3]), 'product_url': match[4] } products.append(product) return products except json.JSONDecodeError: print("Error: Unable to parse JSON response") print("Response content:", response_json[:500]) return [] except Exception as e: print(f"Error parsing products: {str(e)}") return [] # Zenrow SDK code here
이제 데이터를 스크랩한 후 save_to_csv(all_products) 함수를 호출하여 products.csv라는 CSV 파일에 데이터를 저장하면 됩니다.
스크래핑 프로세스가 완료되면 명령을 실행하여 자동으로 데이터를 CSV 파일에 저장하세요.
# Zenrow SDK code goes here max_products = 50 all_products = [] page = 1 while len(all_products) < max_products: print(f"Scraping page {page}...") # Update parameters for each request params = base_params.copy() js_instructions = [{"click": "#load-more-btn"} for _ in range(page)] js_instructions.append({"wait": 5000}) params["js_instructions"] = json.dumps(js_instructions) try: # Send the GET request to ZenRows response = client.get(url, params=params) # Parse the response JSON new_products = parse_products(response.text) if not new_products: print("No more products found. Stopping.") break all_products.extend(new_products) print(f"Found {len(new_products)} products on this page.") print(f"Total products so far: {len(all_products)}") page += 1 # Add a delay to avoid overwhelming the server time.sleep(2) except Exception as e: print(f"Error occurred: {str(e)}") break
이제 모든 제품이 구조화된 형식으로 구성되었으므로 한 단계 더 나아가 최고 가격의 제품 5개를 식별할 수 있으며 각 제품 페이지를 방문하여 제품 설명 및 SKU와 같은 추가 세부정보를 추출해야 합니다. 코드입니다.
가격순으로 제품 정렬: Python의 sorted() 함수를 사용하면 가격순으로 제품 목록을 내림차순으로 정렬하고 상위 5개 제품을 검색할 수 있습니다.
각 페이지에 대한 제품 데이터를 가져오려면 request.get() 함수를 사용하여 각 페이지를 방문해야 합니다. 응답에서 제품 설명과 SKU 코드를 추출할 수 있습니다.
추가 세부정보를 포함하도록 마지막 단계의 CSV 파일을 업데이트할 수도 있습니다.
이를 달성하기 위한 코드는 다음과 같습니다.
# Updated Params and while loop code goes here # Calculate the total price of all products total_sum = sum(product['price'] for product in all_products) print("\nAll products:") for product in all_products: print(product) # Print the total sum of the product prices print(f"\nTotal number of products: {len(all_products)}") print(f"Total sum of product prices: ${total_sum}")
이제 스크랩 후 최고가 제품을 식별할 수 있습니다.
pip install zenrows python-dotenv
추가 정보를 검색한 후 CSV 파일을 수정하거나 이러한 세부 정보가 포함된 새 파일을 만들 수 있습니다.
완전한 app.py 파일은 다음과 같습니다.
# Import ZenRows SDK from zenrows import ZenRowsClient from dotenv import load_dotenv import os # Load environment variables load_dotenv() # Initialize ZenRows client with your API key client = ZenRowsClient(os.getenv("API_KEY")) # URL of the page you want to scrape url = "https://www.scrapingcourse.com/button-click" # Set up initial parameters for JavaScript rendering and interaction base_params = { "js_render": "true", "json_response": "true", "premium_proxy": "true", "markdown_response": "true" }
성공적인 대응은 다음과 같습니다.
python app.py
GitHub에서 전체 코드베이스를 확인하세요.
이 튜토리얼에서는 '더 보기' 버튼을 사용하여 무한 스크롤하여 웹페이지에서 제품을 스크랩하는 방법을 배웠습니다. 개략적인 단계를 따르면 ZenRows를 사용하여 귀중한 제품 정보를 추출하고 스크래핑 기술을 향상시킬 수 있습니다.
Zenrow 웹 스크래핑 도구를 사용하는 방법에 대해 자세히 알아보려면 당사 블로그의 다음 기사를 확인하세요.
위 내용은 ZenRows Web Scraper를 사용하여 무한 스크롤 웹사이트용 제품 스크레이퍼를 구축하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!