ko
English
Español
中國人
Tiếng Việt
Deutsch
Українська
Português
Français
भारतीय
Türkçe
Italiano
Gaeilge
اردو
Indonesia
Polski TripAdvisor는 사용자가 숙박, 식사, 관광 등에 대한 리뷰를 작성하는 널리 사용되는 여행 포털입니다. TripAdvisor 리뷰로 데이터를 보강하면 여행 분석, 경쟁사 연구 등에 도움이 될 수 있습니다. 이 가이드에서는 파이썬을 사용하여 TripAdvisor 데이터를 추출하는 방법과 CSV 형식으로 저장된 데이터에 대해 설명합니다.
이 스크레이퍼를 빌드하기 위해 다음 Python 라이브러리를 사용하겠습니다:
pip를 사용하여 필요한 라이브러리를 설치합니다:
pip install requests lxml
TripAdvisor와 같은 웹사이트에서 데이터를 스크랩할 때는 요청 헤더, 특히 사용자 에이전트를 올바르게 구성하는 것이 중요합니다. 이 헤더를 설정하면 정상적인 사용자가 보낸 요청으로 위장하여 비정상적인 트래픽 패턴으로 인해 스크래핑 활동이 차단을 트리거할 위험을 최소화할 수 있습니다. 또한 프록시 서버를 사용하면 단일 IP 주소에서 허용되는 요청 수와 관련된 제한을 피할 수 있으므로 보다 광범위한 데이터 수집 활동이 용이해집니다.
호텔 페이지 목록을 스크랩하고 세부 정보를 추출하여 CSV 파일로 저장하는 과정을 살펴보겠습니다. 각 부분을 세분화해 보겠습니다.
시작하려면 필요한 라이브러리를 가져옵니다:
import requests
from lxml.html import fromstring
import csv
그런 다음 데이터를 스크랩할 호텔 페이지의 URL 목록을 정의합니다:
urls_list = [
'Https link',
'Https link'
]
요청이 실제 브라우저의 요청을 모방하도록 하려면 헤더를 올바르게 구성하는 것이 중요합니다. 이 단계는 웹사이트의 봇 방지 시스템을 우회하고 차단될 위험을 최소화하는 데 도움이 됩니다.
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',
'cache-control': 'no-cache',
'dnt': '1',
'pragma': 'no-cache',
'sec-ch-ua': '"Chromium";v="130", "Google Chrome";v="130", "Not?A_Brand";v="99"',
'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',
'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36',
}
프록시는 IP 기반 제한을 우회하는 데 도움이 될 수 있습니다. 아래 예에서는 IP 주소 인증과 함께 프록시를 사용합니다. 요청에 프록시를 추가하는 방법은 다음과 같습니다.
proxies = {
'http': 'http://your_proxy_address:port',
'https': 'http://your_proxy_address:port',
}
response = requests.get(url, headers=headers, proxies=proxies)
각 URL에 대해 요청을 보내고 응답 HTML을 구문 분석합니다:
extracted_data = []
for url in urls_list:
response = requests.get(url, headers=headers) # 필요한 경우 proxies=proxies 추가
parser = fromstring(response.text)
XPath를 사용하면 페이지의 특정 요소를 타겟팅할 수 있습니다:
title = parser.xpath('//h1[@data-automation="mainH1"]/text()')[0]
about = parser.xpath('//div[@class="_T FKffI bmUTE"]/div/div/text()')[0].strip()
images_url = parser.xpath('//div[@data-testid="media_window_test"]/div/div/button/picture/source/@srcset')
price = parser.xpath('//div[@data-automation="commerce_module_visible_price"]/text()')[0]
ratings = parser.xpath('//div[@class="jVDab W f u w GOdjs"]/@aria-label')[0].split(' ')[0]
features = parser.xpath('//div[@class="f Q2 _Y tyUdl"]/div[2]/span/span/span/text()')
reviews = parser.xpath('//span[@class="JguWG"]/span//text()')
listing_by = parser.xpath('//div[@class="biGQs _P pZUbB KxBGd"]/text()')[0]
similar_experiences = parser.xpath('//div[@data-automation="shelfCard"]/a/@href')
추출한 정보를 사전에 저장하고 목록에 추가합니다:
data = {
'title': title,
'about': about,
'price': price,
'listing by': listing_by,
'ratings': ratings,
'image_urls': images_url,
'features': features,
'reviews': reviews,
'similar_experiences': similar_experiences
}
extracted_data.append(data)
스크랩 후 데이터를 CSV 파일로 저장합니다:
csv_columns = ['title', 'about', 'price', 'listing by', 'ratings', 'image_urls', 'features', 'reviews', 'similar_experiences']
with open("tripadvisor_data.csv", 'w', newline='', encoding='utf-8') as csvfile:
writer = csv.DictWriter(csvfile, fieldnames=csv_columns)
writer.writeheader()
for data in extracted_data:
writer.writerow(data)
import requests
from lxml.html import fromstring
import csv
urls_list = [
'Https link',
'Https link'
]
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',
'cache-control': 'no-cache',
'dnt': '1',
'pragma': 'no-cache',
'sec-ch-ua': '"Chromium";v="130", "Google Chrome";v="130", "Not?A_Brand";v="99"',
'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',
'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36',
}
proxies = {
'http': 'http://your_proxy_address:port',
'https': 'http://your_proxy_address:port',
}
extracted_data = []
for url in urls_list:
response = requests.get(url, headers=headers, proxies=proxies)
parser = fromstring(response.text)
title = parser.xpath('//h1[@data-automation="mainH1"]/text()')[0]
about = parser.xpath('//div[@class="_T FKffI bmUTE"]/div/div/text()')[0].strip()
images_url = parser.xpath('//div[@data-testid="media_window_test"]/div/div/button/picture/source/@srcset')
price = parser.xpath('//div[@data-automation="commerce_module_visible_price"]/text()')[0]
ratings = parser.xpath('//div[@class="jVDab W f u w GOdjs"]/@aria-label')[0].split(' ')[0]
features = parser.xpath('//div[@class="f Q2 _Y tyUdl"]/div[2]/span/span/span/text()')
reviews = parser.xpath('//span[@class="JguWG"]/span//text()')
listing_by = parser.xpath('//div[@class="biGQs _P pZUbB KxBGd"]/text()')[0]
similar_experiences = parser.xpath('//div[@data-automation="shelfCard"]/a/@href')
data = {
'title': title,
'about': about,
'price': price,
'listing by': listing_by,
'ratings': ratings,
'image_urls': images_url,
'features': features,
'reviews': reviews,
'similar_experiences': similar_experiences
}
extracted_data.append(data)
csv_columns = ['title', 'about', 'price', 'listing by', 'ratings', 'image_urls', 'features', 'reviews', 'similar_experiences']
with open("tripadvisor_data.csv", 'w', newline='', encoding='utf-8') as csvfile:
writer = csv.DictWriter(csvfile, fieldnames=csv_columns)
writer.writeheader()
for data in extracted_data:
writer.writerow(data)
print('saved into tripadvisor_data.csv')
이 가이드는 데이터 스크래핑을 위한 기술적 토대를 마련할 뿐만 아니라 관광 분야에서 포괄적인 분석을 위한 길을 열어줍니다. 여기에 설명된 방법과 기법을 통해 사용자는 시장 트렌드와 소비자 행동에 대해 더 깊이 파고들 수 있습니다. 이러한 인사이트는 강력한 평판 관리 전략을 개발하고 경쟁 분석을 수행하는 데 매우 중요합니다. 이 가이드를 활용하면 관광 산업 내 역학 관계에 대한 이해를 높여 정보에 입각한 전략적 의사결정을 내릴 수 있어 성공을 이끌 수 있습니다.
댓글: 0