Python爬虫采集Tripadvisor数据案例实现

接下来我会为大家详细讲解Python爬虫采集Tripadvisor数据案例实现的完整攻略。

一、准备工作

在开始爬虫之前,我们需要做好以下准备工作:

1.安装Python

由于本案例使用Python进行爬虫,因此需要在电脑上安装Python3.7或以上版本的解释器。

2.安装相关库

在进行爬虫操作之前,我们还需要安装一些Python库,包括requests库、BeautifulSoup库等。可以通过以下命令进行安装:

pip install requests
pip install beautifulsoup4

3.分析网页结构

在进行数据爬取之前,我们需要先分析目标网页的结构,进而确定爬虫获取数据的方式。

二、目标网站

本案例中,我们选择了Tripadvisor这个旅行网站作为目标网站,该网站的网址为 https://www.tripadvisor.com。

三、爬虫流程

接下来我们将会介绍本案例中爬虫的详细流程:

1.确定目标网址

我们需要确定爬取数据的目标网址,本案例中我们选择的是Tripadvisor的某个城市的景点页面,例如:

https://www.tripadvisor.com/Attractions-g293917-Activities-Ho_Chi_Minh_City.html

2.获取网页源码

在确定了目标网址之后,我们需要通过requests库获取该网址的源码,用以后续的数据处理。具体代码实现如下:

import requests

url = 'https://www.tripadvisor.com/Attractions-g293917-Activities-Ho_Chi_Minh_City.html'
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}

response = requests.get(url, headers=headers)
if response.status_code == 200:
    html = response.text

3.解析网页源码

在获取了网页源码之后,我们需要通过BeautifulSoup库进行数据解析,来获取我们需要的数据。具体代码实现如下:

from bs4 import BeautifulSoup

soup = BeautifulSoup(html, 'lxml')

names = soup.select('.attractions-attraction-overview-pois-PoiTitle__poiTitle--2FLHC')
ranks = soup.select('.attractions-attraction-overview-pois-PoiInfo__isAligned--3Qoqq .attractions-attraction-overview-pois-PartOfPrime__part-of-prime-ribbon--2n2M3')
reviews = soup.select('.attractions-attraction-overview-pois-PoiInfo__isAligned--3Qoqq .attractions-attraction-overview-pois-ReviewCount__reviewCount--2lT0I')

for name, rank, review in zip(names, ranks, reviews):
    data = {
        'name': name.get_text(),
        'rank': rank.get_text(),
        'review': review.get_text()
    }
    print(data)

4.存储数据

在获取了我们需要的数据之后,我们可以将其存储到本地文本或者数据库中,以供后续使用。这里我们采用文件存储的方式,具体代码实现如下:

import csv

with open('tripadvisor.csv', 'w', encoding='utf-8-sig', newline='') as csvfile:
    fieldnames = ['name', 'rank', 'review']
    writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
    writer.writeheader()

    for name, rank, review in zip(names, ranks, reviews):
        writer.writerow({'name': name.get_text(), 'rank': rank.get_text(), 'review': review.get_text())

至此,本次爬虫实例的完整流程便介绍完毕。

四、示例说明

以下为两个爬虫实例的具体实现:

示例一:获取某个城市的景点排名及评价

import requests
from bs4 import BeautifulSoup
import csv

url = 'https://www.tripadvisor.com/Attractions-g293917-Activities-Ho_Chi_Minh_City.html'
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}

response = requests.get(url, headers=headers)
if response.status_code == 200:
    html = response.text

soup = BeautifulSoup(html, 'lxml')

names = soup.select('.attractions-attraction-overview-pois-PoiTitle__poiTitle--2FLHC')
ranks = soup.select('.attractions-attraction-overview-pois-PoiInfo__isAligned--3Qoqq .attractions-attraction-overview-pois-PartOfPrime__part-of-prime-ribbon--2n2M3')
reviews = soup.select('.attractions-attraction-overview-pois-PoiInfo__isAligned--3Qoqq .attractions-attraction-overview-pois-ReviewCount__reviewCount--2lT0I')

with open('tripadvisor.csv', 'w', encoding='utf-8-sig', newline='') as csvfile:
    fieldnames = ['name', 'rank', 'review']
    writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
    writer.writeheader()

    for name, rank, review in zip(names, ranks, reviews):
        writer.writerow({'name': name.get_text(), 'rank': rank.get_text(), 'review': review.get_text()})

示例二:获取某个城市的景点信息

import requests
from bs4 import BeautifulSoup
import csv

url = 'https://www.tripadvisor.com/Attractions-g293917-Activities-Ho_Chi_Minh_City.html'
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}

response = requests.get(url, headers=headers)
if response.status_code == 200:
    html = response.text

soup = BeautifulSoup(html, 'lxml')

info_links = soup.select('.attractions-attraction-overview-pois-PoiTitle__poiTitle--2FLHC a')

with open('tripadvisor_info.csv', 'w', encoding='utf-8-sig', newline='') as csvfile:
    fieldnames = ['name', 'type', 'review', 'address', 'phone', 'website']
    writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
    writer.writeheader()

    for link in info_links:
        if link.get('href').startswith('/Attraction_Review'):
            url = 'https://www.tripadvisor.com' + link.get('href')
            response = requests.get(url, headers=headers)
            if response.status_code == 200:
                html = response.text
            soup = BeautifulSoup(html, 'lxml')

            name = soup.select_one('.heading_title').get_text().strip()
            review = soup.select_one('.header_rating span').get_text().strip()
            address = soup.select_one('.address').get_text().strip()
            phone = soup.select_one('.phone').get_text().strip()
            if not phone.startswith('+'):
                phone = None
            website = soup.select_one('.website-link a')
            if website:
                website = website.get('href')
            else:
                website = None

            types = [type.get_text().strip() for type in soup.select('.attractions-attraction-detail-about-card-SingleItemDetail__detail--1obvs .attractions-attraction-detail-about-card-SingleItemDetail__category--1Tkrc a')]
            type_str = ', '.join(types)

            writer.writerow({'name': name, 'type': type_str, 'review': review, 'address': address, 'phone': phone, 'website': website})

以上就是本篇攻略的全部内容,希望对大家在进行Python爬虫采集Tripadvisor数据的时候有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python爬虫采集Tripadvisor数据案例实现 - Python技术站

(1)
上一篇 2023年5月14日
下一篇 2023年5月14日

相关文章

  • 如何在 Python 的条件语句中使用循环?

    【问题标题】:How to use loops in conditional statements in Python?如何在 Python 的条件语句中使用循环? 【发布时间】:2023-04-05 18:17:02 【问题描述】: 我想检查一个列表是否只包含一个特定的元素(在我的例子中是 None) 我相信有一种 Pythonic 的方法,我试过了:if…

    Python开发 2023年4月6日
    00
  • Python中pygal绘制雷达图代码分享

    下面是关于Python中pygal绘制雷达图的攻略。 1. pygal绘制雷达图 pygal是一款功能强大的Python绘图库,可用于生成各种类型的图表,包括雷达图。使用pygal绘制雷达图只需简单的几行代码,如下所示: import pygal radar_chart = pygal.Radar() radar_chart.title = ‘Radar C…

    python 2023年6月6日
    00
  • Python利用Xpath选择器爬取京东网商品信息

    Python利用Xpath选择器爬取京东网商品信息 简介 本文主要介绍如何使用Python的Xpath模块实现京东网商品信息的爬取。Xpath是一种支持路径选择的查询语言,常用于处理XML、HTML以及其他结构化文档的数据。本文将使用Python的Xpath模块和requests模块对京东网的商品信息进行爬取。 前提条件 在开始本文之前,请确保您已经安装了以…

    python 2023年5月14日
    00
  • python创建关联数组(字典)的方法

    创建关联数组,也称字典(Dictionary),是Python中常用的数据结构之一,可以将多个键(key)和对应的值(value)关联在一起。 下面是创建字典的方法: 方式一:使用花括号和冒号 # 创建一个空字典 d = {} # 添加键值对 d[‘name’] = ‘Tom’ d[‘age’] = 18 d[‘gender’] = ‘male’ # 打印字…

    python 2023年5月13日
    00
  • 流行的Ajax应用演示和源码下载

    流行的Ajax应用演示和源码下载,是指在网站开发中使用Ajax技术的一种展示方式。下面将分为三个部分来详细讲解该攻略: 一、Ajax的基本概念 Ajax是Asynchronous JavaScript and XML的缩写,即异步的JavaScript和XML。它是一种在Web页面中实现异步通信的技术,能够让Web页面在不重新加载的情况下更新部分内容。而且由…

    python 2023年6月3日
    00
  • Python中元组的概念及应用小结

    Python中元组的概念及应用小结 什么是元组 元组(tuple)是一种有序的不可变序列类型,它可以用来存储一组数据,一旦创建就无法修改。元组使用小括号 () 来表示,可以包含任意类型的数据,包括数字、字符串、列表、字典、甚至是另一个元组。 创建元组 创建元组非常简单,只需使用一对小括号 () ,将多个数据用逗号 , 隔开即可,如下所示: # 创建一个包含多…

    python 2023年5月14日
    00
  • 玩转Win XP系统内置语音输入软件

    玩转Win XP系统内置语音输入软件攻略 Win XP系统内置了语音输入软件,可以帮助用户实现语音输入文字。下面我们来详细讲解如何玩转Win XP系统内置语音输入软件。 步骤一:打开语音输入软件 依次点击“开始”菜单 -> “所有程序” -> “附件” -> “辅助工具” -> “语音识别引擎”,即可打开语音输入软件。 步骤二:设置语…

    python 2023年6月5日
    00
  • Python2.7.10以上pip更新及其他包的安装教程

    Python2.7.10以上pip更新及其他包的安装教程 1.更新pip到最新版本 在命令行中输入如下代码: pip install –upgrade pip 执行上述代码后,pip会自动下载并安装最新版本的pip。 2. 安装其他Python包 以安装numpy和pandas为例,执行以下代码: 安装numpy pip install numpy 安装p…

    python 2023年5月14日
    00
合作推广
合作推广
分享本页
返回顶部