Python으로 Walmart 데이터를 스크랩하는 방법에 대한 가이드

댓글: 0

비즈니스 인텔리전스, 연구, 분석은 웹 스크래핑을 통해 얻을 수 있는 무한한 가능성 중 일부에 불과합니다. Walmart와 같은 본격적인 비즈니스 실체는 필요한 정보를 수집하기에 완벽한 구조를 제공합니다. 다양한 스크래핑 기술을 사용하여 수많은 웹사이트에서 이름, 가격, 리뷰 정보와 같은 Walmart 데이터를 쉽게 스크래핑할 수 있습니다.

이 글에서는 Walmart 데이터를 스크랩하는 방법에 대해 자세히 알아보겠습니다. HTTP 요청을 전송하는 데는 요청을 사용하고 반환된 HTML 문서를 구문 분석하는 데는 lxml을 사용할 것입니다.

파이썬을 사용해 월마트 데이터를 스크랩하는 이유는 무엇인가요?

여러 리테일 사이트의 제품 데이터를 스크랩하는 데 있어 Python은 가장 효과적인 옵션 중 하나입니다. 추출 프로젝트에 원활하게 통합하는 방법은 다음과 같습니다:

  1. 고급 라이브러리. 웹 상호 작용을 위한 요청과 HTML 구문 분석을 위한 lxml이 존재하므로 방대한 온라인 카탈로그를 최대한 쉽고 효과적으로 스크랩할 수 있습니다.
  2. 사용의 용이성. 사용하기 쉬운 구문을 통해 사용자는 사전 경험이 거의 없거나 전혀 없어도 데이터 검색 프로세스를 프로그래밍할 수 있으므로 바로 업무에 착수할 수 있습니다.
  3. 커뮤니티 지원. 리테일 웹사이트는 복잡하기 때문에 발생하는 문제를 해결하는 데 도움이 되는 커뮤니티의 적격 리소스와 지원이 많이 있습니다.
  4. 데이터 처리. 심층 분석. 데이터 처리를 위한 Pandas와 시각적 표현을 위한 Matplotlib의 도움으로 Python은 사용자가 수집 및 분석과 같은 광범위한 규모의 데이터를 분석할 수 있게 해줍니다.
  5. 동적 콘텐츠 관리. 셀레늄을 사용하면 동적 웹 요소와의 상호 작용이 가능해져 자바스크립트로 로드된 페이지에서도 광범위한 데이터를 수집할 수 있습니다.
  6. 효과적인 확장. 대규모 및 소규모 데이터 세트를 관리할 수 있는 기능을 갖춘 Python은 광범위한 데이터 추출 작업을 수행하더라도 오랜 시간 동안 매우 우수한 성능을 발휘합니다.

소매업 프로젝트에 이러한 언어를 사용하면 기술적 측면이 복잡해질 뿐만 아니라 분석의 범위와 효율성이 높아져 시장에 대한 심도 있는 지식을 얻고자 하는 전문가에게 최고의 선택이 될 수 있습니다. 이러한 측면은 Walmart 데이터를 스크랩하기로 결정할 때 특히 유용할 수 있습니다.

이제 Walmart 웹 스크래핑 도구 구축부터 시작해 보겠습니다.

Walmart 데이터 스크랩을 위한 환경 설정하기

시작하려면 컴퓨터에 Python이 설치되어 있는지 확인하세요. 필요한 라이브러리는 pip를 사용하여 다운로드할 수 있습니다:


pip install requests
pip install  lxml
pip install urllib3

이제 다음과 같은 라이브러리를 가져와 보겠습니다:

  • requests - HTTP를 통해 웹 페이지를 검색하기 위한 요청입니다;
  • lxml - HTML 문서의 트리 생성용;
  • CSV - 수집된 데이터를 CSV 파일에 기록합니다;
  • random - 프록시 및 사용자 에이전트 문자열 선택에 사용됩니다.

import requests
from lxml import html
import csv
import random
import urllib3
import ssl

제품 URL 정의

Walmart 데이터를 스크랩할 제품 URL 목록은 다음과 같이 추가할 수 있습니다.


product_urls = [
    'link with https',
    'link with https',
    'link with https'
]

사용자 에이전트 문자열 및 프록시

Walmart를 웹 스크래핑할 때는 실제 브라우저를 모방하기 위해 올바른 HTTP 헤더, 특히 사용자-에이전트 헤더를 제시하는 것이 중요합니다. 또한 순환 프록시 서버를 사용하여 사이트의 안티 봇 시스템을 우회할 수도 있습니다. 아래 예시에서는 IP 주소별로 프록시 서버 인증을 추가하는 지침과 함께 User-Agent 문자열을 제시합니다.


user_agents = [
    'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
    'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
    'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
]

proxy = [
    '<ip>:<port>',
    '<ip>:<port>',
    '<ip>:<port>',
]

요청 헤더

요청 헤더는 사용자의 브라우저에서 온 것처럼 위장하는 방식으로 설정해야 합니다. Walmart 데이터를 스크랩하려고 할 때 많은 도움이 될 것입니다. 다음은 그 예시입니다:


headers = {
    'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
    'accept-language': 'en-IN,en;q=0.9',
    'dnt': '1',
    'priority': 'u=0, i',
    'sec-ch-ua': '"Not/A)Brand";v="8", "Chromium";v="126", "Google Chrome";v="126"',
    'sec-ch-ua-mobile': '?0',
    'sec-ch-ua-platform': '"Linux"',
    'sec-fetch-dest': 'document',
    'sec-fetch-mode': 'navigate',
    'sec-fetch-site': 'none',
    'sec-fetch-user': '?1',
    'upgrade-insecure-requests': '1',
}

데이터 스토리지 초기화

기본 단계는 제품 정보를 수용할 구조를 만드는 것입니다.


product_details = []

URL 페이지 열거는 다음과 같은 방식으로 작동합니다: 모든 URL 페이지에 대해 무작위로 선택된 사용자 에이전트와 프록시를 사용하여 GET 요청이 시작됩니다. HTML 응답이 반환되면 이름, 가격 및 리뷰를 포함한 제품 세부 정보를 구문 분석합니다. 관련 세부 정보는 사전 데이터 구조에 저장되며 나중에 이전에 생성된 목록에 추가됩니다.


for url in product_urls:
   headers['user-agent'] = random.choice(user_agents)
   proxies = {
       'http': f'http://{random.choice(proxy)}',
       'https': f'http://{random.choice(proxy)}',
   }
   try:
       # URL로 HTTP GET 요청을 보냅니다.
       response = requests.get(url=url, headers=headers, proxies=proxies, verify=False)
       print(response.status_code)
       response.raise_for_status()
   except requests.exceptions.RequestException as e:
       print(f'Error fetching data: {e}')

   # lxml을 사용하여 HTML 콘텐츠 구문 분석
   parser = html.fromstring(response.text)
   # 제품 제목 추출
   title = ''.join(parser.xpath('//h1[@id="main-title"]/text()'))
   # 추출 제품 가격
   price = ''.join(parser.xpath('//span[@itemprop="price"]/text()'))
   # 리뷰 세부 정보 추출
   review_details = ''.join(parser.xpath('//div[@data-testid="reviews-and-ratings"]/div/span[@class="w_iUH7"]/text()'))

   # 추출된 세부 정보를 사전에 저장
   product_detail = {
       'title': title,
       'price': price,
       'review_details': review_details
   }
   # 목록에 제품 세부 정보 추가
   product_details.append(product_detail)

제목:

1.png

가격:

2.png

세부 정보 검토:

3.png

데이터를 CSV로 저장

  1. 파일 유형으로 CSV를 지정하는 새 파일을 만들고 쓰기 모드로 설정합니다.
  2. CSV 파일 필드 이름(열)을 지정합니다.
  3. CSV 파일에 사전을 쓰려면 csv.DictWriter 객체를 만듭니다.
  4. CSV 파일의 헤더 행을 작성합니다.
  5. product_details의 모든 사전에 대해 반복하여 해당 사전을 CSV 파일에 행으로 기록합니다.

with open('walmart_products.csv', 'w', newline='') as csvfile:
    fieldnames = ['title', 'price', 'review_details']
    writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
    writer.writeheader()
    for product_detail in product_details:
        writer.writerow(product_detail)

코드 완성

Walmart를 웹 스크래핑할 때 Python 전체 스크립트는 아래 제공된 것과 같은 모양입니다. 또한 각 섹션을 더 쉽게 이해할 수 있도록 몇 가지 주석이 제공됩니다.


import requests
from lxml import html
import csv
import random
import urllib3
import ssl

ssl._create_default_https_context = ssl._create_stdlib_context
urllib3.disable_warnings()


# Walmart 데이터를 스크랩할 제품 URL 목록
product_urls = [
   'link with https',
   'link with https',
   'link with https'
]

# 익명성을 위한 무작위 사용자-에이전트 문자열
user_agents = [
   'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
   'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
   'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
]

# IP 로테이션을 위한 프록시 목록
proxy = [
    '<ip>:<port>',
    '<ip>:<port>',
    '<ip>:<port>',
]


# 브라우저 요청을 모방하는 헤더
headers = {
   'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
   'accept-language': 'en-IN,en;q=0.9',
   'dnt': '1',
   'priority': 'u=0, i',
   'sec-ch-ua': '"Not/A)Brand";v="8", "Chromium";v="126", "Google Chrome";v="126"',
   'sec-ch-ua-mobile': '?0',
   'sec-ch-ua-platform': '"Linux"',
   'sec-fetch-dest': 'document',
   'sec-fetch-mode': 'navigate',
   'sec-fetch-site': 'none',
   'sec-fetch-user': '?1',
   'upgrade-insecure-requests': '1',
}

# 빈 목록을 초기화하여 제품 세부 정보를 저장합니다.
product_details = []

# 각 제품 URL을 반복해서 살펴보기
for url in product_urls:
   headers['user-agent'] = random.choice(user_agents)
   proxies = {
       'http': f'http://{random.choice(proxy)}',
       'https': f'http://{random.choice(proxy)}',
   }
   try:
       # URL로 HTTP GET 요청을 보냅니다.
       response = requests.get(url=url, headers=headers, proxies=proxies, verify=False)
       print(response.status_code)
       response.raise_for_status()
   except requests.exceptions.RequestException as e:
       print(f'Error fetching data: {e}')

   # lxml을 사용하여 HTML 콘텐츠 구문 분석
   parser = html.fromstring(response.text)
   # 제품 제목 추출
   title = ''.join(parser.xpath('//h1[@id="main-title"]/text()'))
   # 추출 제품 가격
   price = ''.join(parser.xpath('//span[@itemprop="price"]/text()'))
   # 리뷰 세부 정보 추출
   review_details = ''.join(parser.xpath('//div[@data-testid="reviews-and-ratings"]/div/span[@class="w_iUH7"]/text()'))

   # 추출된 세부 정보를 사전에 저장
   product_detail = {
       'title': title,
       'price': price,
       'review_details': review_details
   }
   # 목록에 제품 세부 정보 추가
   product_details.append(product_detail)

# 추출한 데이터를 CSV 파일에 쓰기
with open('walmart_products.csv', 'w', newline='') as csvfile:
   fieldnames = ['title', 'price', 'review_details']
   writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
   writer.writeheader()
   for product_detail in product_details:
       writer.writerow(product_detail)

추가 제안 사항

Python을 사용하여 Walmart 스크래핑 API와 인터페이스하는 경우, Walmart 가격 및 Walmart 리뷰 결과를 효과적으로 스크랩하는 강력한 방법을 개발하는 것이 중요합니다. 이 API는 광범위한 제품 데이터에 대한 직접적인 파이프라인을 제공하여 가격 및 고객 피드백에 대한 실시간 분석을 용이하게 합니다.

이러한 특정 전략을 사용하면 수집된 정보의 정확성과 범위가 향상되어 기업이 시장 변화와 소비자 트렌드에 빠르게 적응할 수 있습니다. Python에서 Walmart API를 전략적으로 적용함으로써 기업은 데이터 수집 프로세스를 최적화하여 종합적인 시장 분석과 정보에 기반한 의사결정을 내릴 수 있습니다.

결론

이 튜토리얼에서는 Python 라이브러리를 사용하여 Walmart 데이터를 스크랩하고 나중에 분석할 수 있도록 CSV 파일로 저장하는 방법을 설명했습니다. 제공된 스크립트는 기본이며, 스크래핑 프로세스의 효율성을 개선하기 위해 수정할 수 있는 시작점 역할을 합니다. 개선 사항으로는 요청 사이에 임의의 시간 간격을 추가하여 사람의 브라우징을 시뮬레이션하고, 사용자 에이전트와 프록시를 사용하여 봇을 마스킹하고, 고급 오류 처리 기능을 구현하여 스크래핑 중단 또는 실패를 해결하는 것 등이 있습니다.


댓글:

0 댓글