TripAdvisor es un portal de viajes muy utilizado en el que los usuarios escriben opiniones sobre alojamiento, restaurantes, visitas turísticas, etc. Enriquecer los datos con las opiniones de TripAdvisor puede ser útil para realizar análisis de viajes, estudios de la competencia, etc. En esta guía, explicaremos cómo se pueden extraer los datos de TripAdvisor mediante Python y almacenarlos en formato csv.
Para construir este scraper, utilizaremos las siguientes librerías de Python:
Instale las bibliotecas necesarias mediante pip:
pip install requests lxml
Cuando se extraen datos de sitios web como TripAdvisor, es fundamental configurar correctamente las cabeceras de las solicitudes, especialmente User-Agent. Al configurar esta cabecera, puedes disfrazar tus solicitudes como si procedieran de usuarios legítimos, lo que minimiza el riesgo de que tus actividades de scraping provoquen bloqueos debido a patrones de tráfico inusuales. Además, el empleo de servidores proxy es esencial para eludir las restricciones relacionadas con el número de solicitudes permitidas desde una única dirección IP, facilitando así esfuerzos de recopilación de datos más amplios.
Vamos a pasar por el proceso de raspado de una lista de páginas de hoteles, la extracción de los detalles, y guardarlos en un archivo CSV. Vamos a desglosar cada parte.
Para empezar, importe las bibliotecas necesarias:
import requests
from lxml.html import fromstring
import csv
A continuación, defina una lista de URL de las páginas de hoteles de las que desea extraer datos:
urls_list = [
'Https link',
'Https link'
]
Para asegurarse de que sus peticiones imitan las de un navegador real, es crucial configurar correctamente las cabeceras. Este paso ayuda a eludir los sistemas de protección anti-bot de los sitios web y minimiza el riesgo de ser bloqueado.
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',
}
Los proxies pueden ayudar a eludir las restricciones basadas en IP. En el siguiente ejemplo, utilizamos un proxy con autenticación de dirección IP. A continuación se explica cómo añadir un proxy a las solicitudes.
proxies = {
'http': 'http://your_proxy_address:port',
'https': 'http://your_proxy_address:port',
}
response = requests.get(url, headers=headers, proxies=proxies)
Para cada URL, envíe una solicitud y analice la respuesta HTML:
extracted_data = []
for url in urls_list:
response = requests.get(url, headers=headers) # Añadir proxies=proxies si es necesario
parser = fromstring(response.text)
Utilizando XPath, podemos dirigirnos a elementos específicos de la página:
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')
Almacena la información extraída en un diccionario y añádela a una lista:
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)
Tras el scraping, guarda los datos en un archivo 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')
Esta guía no sólo sienta las bases técnicas para el scraping de datos, sino que también abre vías para un análisis exhaustivo en el sector turístico. Los métodos y técnicas que aquí se detallan permiten a los usuarios profundizar en las tendencias del mercado y los comportamientos de los consumidores. Estos conocimientos son cruciales para desarrollar estrategias sólidas de gestión de la reputación y realizar análisis competitivos. Gracias a esta guía, los usuarios pueden comprender mejor la dinámica del sector turístico, lo que les permite tomar decisiones estratégicas con conocimiento de causa para alcanzar el éxito.
Мы получили вашу заявку!
Ответ будет отправлен на почту в ближайшее время.
С уважением proxy-seller.com!
Comentarios: 0