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基于watchdog库全自动化监控目录文件

    下面是详细讲解”python基于watchdog库全自动化监控目录文件”的完整攻略。 什么是watchdog库 watchdog库是一个Python库,它可以监视文件系统中的任何目录变化,并根据您的需要执行操作。它支持文件和目录的监控,并通过轮询文件系统来检查更改。可以通过在此基础上构建项目来轻松实现全自动化监控。 安装watchdog库 请先确保已按照所需…

    python 2023年6月5日
    00
  • python爬虫 — 处理emoji表情符导致xpath无法正常解析网页的问题

    前言   本篇文章很短,就是记录一个偶然遇到的问题   问题复现   是这样的,在用xpath解析某网站的时候,由于网站数据格式是普通的html,而非json字符串,所以只能解析DOM对象,有的能用正则表达式的我都尽量用正则表达式了,没法用正则的我都用beautifulsoup库或者pyquery了,但是没法,通用型还是没法跟xpath比,而且我已经写好一版…

    爬虫 2023年4月13日
    00
  • Python Tkinter之事件处理详解

    Python Tkinter之事件处理详解 什么是事件? 在Tkinter中,事件指的是用户(或操作系统)执行的一些动作,例如单击鼠标、按下键盘等。Tkinter中的每一种组件都可以绑定多种类型的事件,例如Button组件可以绑定单击事件、双击事件等。 如何绑定事件? 绑定事件的方法是bind,大多数组件都支持该方法。例如,如果我们有一个Button组件,想…

    python 2023年6月13日
    00
  • 移除切比雪夫多项式小拖尾系数的Python程序

    移除切比雪夫多项式小拖尾系数的过程,通常被称为切比雪夫多项式带通滤波。这个过程可以通过一系列的数学公式和操作完成。在Python中,我们可以用一些库和函数来实现这个过程。以下是一种比较完整的Python程序,它可以用来移除切比雪夫多项式小拖尾系数: 导入所需库 import scipy.signal as signalimport numpy as np 配…

    python-answer 2023年3月25日
    00
  • OpenCV实现去除背景识别的方法总结

    下面是“OpenCV实现去除背景识别的方法总结”的完整攻略: 目录 前言 背景移除方法 基于帧差法的背景移除 基于均值漂移的背景移除 实现过程 获取视频帧 预处理视频帧 处理连续视频帧 示例说明 示例1:使用帧差法去除背景 示例2:使用均值漂移法去除背景 前言 背景移除技术是图像处理中常用的技术之一。在许多应用中,我们需要对前景物体进行分割,例如人脸识别、行…

    python 2023年6月6日
    00
  • Python ttkbootstrap的介绍与使用教程

    Python ttkbootstrap的介绍与使用教程 简介 ttkbootstrap是Python的一个扩展包,可用于使用Bootstrap 4主题来美化Tkinter GUI界面。它基于Python的标准GUI库Tkinter,提供了一组基于Bootstrap 4的Tkinter控件,使Tkinter GUI界面更美观,易于使用。 安装 要安装ttkbo…

    python 2023年6月13日
    00
  • Python移动测试开发subprocess模块项目实战

    下面是“Python移动测试开发subprocess模块项目实战”的完整攻略: 一、subprocess模块简介 subprocess模块是Python标准库中的一个模块,它允许我们创建新的进程、连接到子进程的管道、从子进程读取或写入数据和获取子进程的返回码等操作,非常适合处理复杂的操作系统任务。 二、subprocess模块的使用 1. 创建新进程 我们可…

    python 2023年6月3日
    00
  • 如何用NumPy抑制小数的科学符号的使用

    使用NumPy抑制小数的科学符号可以让我们更方便地看到精确的小数值,以便更好地进行数据分析和预测。以下是使用NumPy抑制小数的科学符号的完整攻略: 1. 设置NumPy的全局浮点格式 在NumPy中,可以使用set_printoptions()函数设置全局浮点格式,如下所示: import numpy as np # 设置全局浮点格式 np.set_pri…

    python-answer 2023年3月25日
    00
合作推广
合作推广
分享本页
返回顶部