O TripAdvisor é um portal de viagens muito utilizado onde os utilizadores escrevem comentários sobre alojamento, refeições, visitas turísticas, etc. Enriquecer os dados com as avaliações do TripAdvisor pode ser útil para a análise de viagens, estudos de concorrência, etc. Neste guia, vamos abordar a forma como os dados do TripAdvisor podem ser extraídos utilizando python e os dados armazenados num formato csv.
Para construir este scraper, vamos usar as seguintes bibliotecas Python:
Instale as bibliotecas necessárias usando pip:
pip install requests lxml
Ao extrair dados de sites como o TripAdvisor, é crucial configurar corretamente os cabeçalhos de pedido, especialmente o User-Agent. Ao definir este cabeçalho, pode disfarçar os seus pedidos como se fossem provenientes de utilizadores legítimos, o que minimiza o risco de as suas actividades de recolha de dados desencadearem bloqueios devido a padrões de tráfego invulgares. Além disso, a utilização de servidores proxy é essencial para contornar restrições relacionadas com o número de pedidos permitidos a partir de um único endereço IP, facilitando assim esforços de recolha de dados mais extensos.
Vamos percorrer o processo de recolha de uma lista de páginas de hotéis, extrair detalhes e guardá-los num ficheiro CSV. Vamos analisar cada parte.
Para começar, importe as bibliotecas necessárias:
import requests
from lxml.html import fromstring
import csv
Em seguida, defina uma lista de URLs para as páginas de hotel das quais pretende extrair dados:
urls_list = [
'Https link',
'Https link'
]
Para garantir que os seus pedidos imitam os de um navegador real, é crucial configurar corretamente os cabeçalhos. Este passo ajuda a contornar os sistemas de proteção anti-bot nos sítios Web e minimiza o risco 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',
}
Os proxies podem ajudar a contornar as restrições baseadas no IP. No exemplo abaixo, usamos um proxy com autenticação de endereço IP. Veja como adicionar um proxy às solicitações.
proxies = {
'http': 'http://your_proxy_address:port',
'https': 'http://your_proxy_address:port',
}
response = requests.get(url, headers=headers, proxies=proxies)
Para cada URL, envie um pedido e analise o HTML de resposta:
extracted_data = []
for url in urls_list:
response = requests.get(url, headers=headers) # Adicionar proxies=proxies se necessário
parser = fromstring(response.text)
Utilizando XPath, podemos direcionar elementos específicos na 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')
Armazenar as informações extraídas num dicionário e anexá-las a uma 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)
Após a recolha, guarde os dados num ficheiro 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')
Este guia não só estabelece uma base técnica para a recolha de dados, como também abre caminhos para uma análise abrangente no sector do turismo. Os métodos e técnicas aqui descritos permitem aos utilizadores aprofundar as tendências do mercado e os comportamentos dos consumidores. Estes conhecimentos são cruciais para desenvolver estratégias sólidas de gestão da reputação e efetuar análises da concorrência. Ao utilizar este guia, os utilizadores podem melhorar a sua compreensão da dinâmica da indústria do turismo, tornando possível a tomada de decisões estratégicas informadas que conduzam ao sucesso.
Мы получили вашу заявку!
Ответ будет отправлен на почту в ближайшее время.
С уважением proxy-seller.com!
Comentários: 0