当前位置: 首页 > news >正文

【爬虫】爬取旅行评论和评分

以马蜂窝“普达措国家公园”为例,其评论高达3000多条,但这3000多条并非是完全向用户展示的,向用户展示的只有5页,数了一下每页15条评论,也就是75条评论,有点太少了吧!

 因此想了个办法尽可能多爬取一些评论,根据我对爬虫爬取数据法律法规的相关了解,爬取看得到的数据是合法的,而在评论最开始的这个地方有对评论的分类,当然每个分类主题也是最多能看到5页内容,但是肯定会比我们被动的只爬取5页多很多内容,因此我们选择按主题分类去爬取评论。

点击上图中的全部,右键检查或者按下F12去定位“全部” 

 把这个元素收起来就可以看到如下图,这个<li></li>标签的列表里保存着分类名称、类型、id等,如果比较多的话可以利用selenium的XPATH自动获取之后,再套进代码里面,由于我只演示一个例子并且分类标签也不多,我就直接拿了这个列表放在代码里。

 

注意我们需要用到的是他的两个属性值:

data-type、data-catagory

我存放的方式:(代码标注的分类id)

data-type:a = [0,0,1,1,1,2,2,2,2,2,0]
data-catagory:b = [0,2,13,12,11,134700810,173942219,112047583,112968615,143853527,1]

注意这个顺序a[i]b[i]是按照图中框起来的<li></li>标签一一对应的,顺序不能错。

点击Network,按下Ctrl+R刷新一下

找到Name为poiCommentListApi?为首的(如下图),点击Headers,红线画出来的内容是代码中comment_url(代码标注①的地方),根据你自己需要的进行替换。

 下滑可以看到Request Headers中的‘Referer’和‘User-agent’两个参数,根据你自己所需要的进行替换(代码标注的②和③)

 点击Payload,如果是下面这种情况你就点击一下左边的分类标签(任选一个),在Name列表中一直往下滑找到Name为poiCommentListApi?为首的(根据你的点击次数就会有多少个,从后往前找看看规律)

 

找到最后一个Name为poiCommentListApi?为首的,点击Payload,看一下这个params参数

所以对于同一个景点来说,变化的参数有:评论类别(由type、catagory决定)、页码(取值范围1-5)

 

分析完之后就可以写代码了

🌹--<-<-<@美味的code👑 

import re
import time
import requests
import pandas as pdcomment_url = 'http://pagelet.mafengwo.cn/poi/pagelet/poiCommentListApi?'
requests_headers = {'Referer': 'https://www.mafengwo.cn/poi/3110.html','User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36'
}# Comment categories
a = [0, 0, 1, 1, 1, 2, 2, 2, 2, 2, 0]
b = [0, 2, 13, 12, 11, 134700810, 173942219, 112047583, 112968615, 143853527, 1]# Iterate through ten categories of comments
for i in range(11):# Get comments from five pages for each categoryfor num in range(1, 6):print('Fetching Page', num)requests_data = {'params': '{"poi_id":"3110","type":"%d","category":"%d","page":"%d","just_comment":1}' % (a[i], b[i], num)}response = requests.get(url=comment_url, headers=requests_headers, params=requests_data)if 200 == response.status_code:page = response.content.decode('unicode-escape', 'ignore').encode('utf-8', 'ignore').decode('utf-8')page = page.replace('\\/', '/')date_pattern = r'<a class="btn-comment _j_comment" title="Add Comment">Comment</a>.*?\n.*?<span class="time">(.*?)</span>'date_list = re.compile(date_pattern).findall(page)star_pattern = r'<span class="s-star s-star(\d)"></span>'star_list = re.compile(star_pattern).findall(page)comment_pattern = r'<p class="rev-txt">([\s\S]*?)</p>'comment_list = re.compile(comment_pattern).findall(page)for num in range(0, len(date_list)):date = date_list[num]star = star_list[num]comment = comment_list[num]comment = str(comment).replace('&nbsp;', '')comment = comment.replace('<br>', '')comment = comment.replace('<br />', "")comment = comment.replace('\n', "")comment = comment.replace("【", "")comment = comment.replace("】", "")comment = comment.replace("~", "")comment = comment.replace("*", "")comment = comment.replace('<br />', '')df = pd.DataFrame({'time1': date_list, 'score': star_list, 'content': comment_list})df.to_csv('mafengwo.csv', mode='a', encoding='gb18030', index=False, header=None)print('Write successful')else:print("Fetch failed")

既然都看到這裏了,不如点个关注+收藏再走咯!? 

相关文章:

【爬虫】爬取旅行评论和评分

以马蜂窝“普达措国家公园”为例&#xff0c;其评论高达3000多条&#xff0c;但这3000多条并非是完全向用户展示的&#xff0c;向用户展示的只有5页&#xff0c;数了一下每页15条评论&#xff0c;也就是75条评论&#xff0c;有点太少了吧&#xff01; 因此想了个办法尽可能多爬…...

C++ 泛型编程:函数模板

文章目录 前言一、什么是泛型编程二、函数模板三、函数模板的使用四、多参数函数模板五&#xff0c;示例代码&#xff1a;总结 前言 当需要编写通用的代码以处理不同类型的数据时&#xff0c;C 中的函数模板是一个很有用的工具。函数模板允许我们编写一个通用的函数定义&#…...

.NET实现解析字符串表达式

一、引子功能需求 我们创建了一个 School 对象&#xff0c;其中包含了教师列表和学生列表。现在&#xff0c;我们需要计算教师平均年龄和学生平均年龄。 //创建对象 School school new School() {Name "小菜学园",Teachers new List<Teacher>(){new Teach…...

Ae 效果:CC Environment

透视/CC Environment Perspective/CC Environment CC Environment&#xff08;CC 环境&#xff09;主要用于创建 3D 环境映射&#xff0c;可以将一个 2D 图像转换为 3D 空间的反射或折射。该效果通常用于模拟真实世界的全景相机镜头和环境反射。 在实际操作中&#xff0c;可将效…...

PotgreSQL 基于时间点恢复

文章目录 前言1. WAL 日志1.1 WAL 配置 2. pg_basebackup2.1 常用命令 3. 全备恢复实验3.1 进行一个全备3.2 写入增量数据3.3 模拟备份恢复 总结 前言 本篇文章介绍 PostgreSQL 基于时间点恢复&#xff08;point-in-time-recover&#xff09;需要的条件及恢复过程&#xff0c;…...

③ vue组件

vue组件创建 在App.vue中添加。 技巧&#xff1a;先import&#xff0c;把vue组件地址写出来。然后在template中写名字。剩下的就自动生成。要看下import有没有多生成什么。 注意1&#xff1a; 注意2&#xff1a; 不只是能在App.vue中引入组件。任意组件中都可以引用其他组件…...

政策因子条件列表类型

type:1&#xff08;多选下拉输入&#xff09; 目前选项是本地写死得&#xff0c;传参拼接了carOwner这些东西&#xff0c;形式是多选输入 type:2 &#xff08;普通指定形式&#xff09; type:3&#xff08;普通区间形式&#xff09; type:4 (指定输入) 指定除外得特殊一种&…...

python中yield关键字

yield和return 理解一个东西最好的办法就是找一个和它类似的东西&#xff0c;然后再搞清楚它们之间的区别。 yield最类似的东西就是return&#xff0c;因为他们起到了同样的作用&#xff1a;返回值。 看这个return的函数&#xff1a; def have_some_wine():print(先开一瓶酒&a…...

2023年10款常用的Mac工具合集

Typora Typora 是一款由 Abner Lee 开发的轻量级 Markdown 编辑器&#xff0c;与其他 Markdown 编辑器不同的是&#xff0c;Typora 没有采用源代码和预览双栏显示的方式&#xff0c;而是采用所见即所得的编辑方式&#xff0c;实现了即时预览的功能&#xff0c;但也可切换至源代…...

Python爬虫——requests_cookie登陆古诗文网

寻找登陆需要的参数 __VIEWSTATE:aiMG0UXAfCzak10C7436ZC/RXoZbM2lDlX1iU/4wjjdUNsW8QUs6W2/3M6XIKagQZrC7ooD8Upj8uCnpQMXjDAp6fS/NM2nGhnKO0KOSXfT3jGHhJAOBouMI3QnlpJCQKPXfVDJPYwh169MGLFC6trY __VIEWSTATEGENERATOR: C93BE1AE from: http://so.gushiwen.cn/user/collect.…...

C++——继承

文章目录 &#x1f99c;1. 什么是继承&#x1f40a;1.1 概念&#x1f40a;1.2 格式&#x1f40a;1.3 继承方式 & 访问限定符 &#x1f426;2. 派生类和基类的赋值问题&#x1f9a9;3. 派生类和基类同名成员问题&#x1f413;4.派生类默认成员函数&#x1f409;4.1 构造函数…...

openGauss学习笔记-38 openGauss 高级数据管理-游标

文章目录 openGauss学习笔记-38 openGauss 高级数据管理-游标38.1 语法格式38.2 参数说明38.3 示例 openGauss学习笔记-38 openGauss 高级数据管理-游标 为了处理SQL语句&#xff0c;存储过程进程分配一段内存区域来保存上下文联系。游标是指向上下文区域的句柄或指针。借助游…...

Blazor简单教程(1.1):Razor基础语法

文章目录 前言基本文件配置引入Layout组件 语法介绍pagecodeRazor 语法[ 显式表达和隐式表达](https://learn.microsoft.com/zh-cn/aspnet/core/mvc/views/razor?viewaspnetcore-7.0#explicit-razor-expressions) 绑定简单绑定双向绑定带参数的函数绑定 依赖注入 前言 Blazor…...

Leetcode-每日一题【剑指 Offer 25. 合并两个排序的链表】

题目 输入两个递增排序的链表&#xff0c;合并这两个链表并使新链表中的节点仍然是递增排序的。 示例1&#xff1a; 输入&#xff1a;1->2->4, 1->3->4输出&#xff1a;1->1->2->3->4->4 限制&#xff1a; 0 < 链表长度 < 1000 解题思路 1…...

前端盒子模型

day05-盒子模型 目标&#xff1a;掌握盒子模型组成部分&#xff0c;使用盒子模型布局网页区域 01-选择器 结构伪类选择器 基本使用 作用&#xff1a;根据元素的结构关系查找元素。 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lNhfXFEc-169194…...

【ARM Cache 系列文章 9 -- ARM big.LITTLE技术】

文章目录 big.LITTLE 技术背景big.LITTLE 技术详解big.LITTLE 硬件要求 big.LITTLE 软件模型CPU MigrationGlobal Task SchedulingGlobal Task Scheduling比CPU Migration的优势 转自&#xff1a;https://zhuanlan.zhihu.com/p/630981648 如有侵权&#xff0c;请联系删除 big.L…...

【BASH】回顾与知识点梳理(十四)

【BASH】回顾与知识点梳理 十四 十四. 文件与目录的默认权限与隐藏权限14.1 文件预设权限&#xff1a;umaskumask 的利用与重要性&#xff1a;专题制作 14.2 文件隐藏属性chattr (配置文件案隐藏属性)lsattr (显示文件隐藏属性) 14.3 文件特殊权限&#xff1a; SUID, SGID, SBI…...

乡村振兴指数与其30余个原始变量数据(2000-2022年)

乡村振兴是当下经济学研究的热点之一&#xff0c;对乡村振兴进行测度&#xff0c;是研究基础。测度乡村振兴水平的学术论文广泛发表在《数量经济技术经济研究》等顶刊上。整理了2000-2022年城市层面的乡村振兴指数与其30余个原始变量数据&#xff0c;供大家使用。 数据来源&…...

深入理解MySQL表的操作和管理

MySQL是一种广泛使用的关系型数据库管理系统&#xff0c;用于存储和管理大量结构化数据。在MySQL中&#xff0c;表是数据的基本组织单位&#xff0c;对表的操作和管理能力对于数据库的性能和数据完整性至关重要。本文将深入讨论MySQL表的操作和管理&#xff0c;包括创建表、修改…...

MATLAB图论合集(一)基本操作基础

本帖总结一些经典的图论问题&#xff0c;通过MATLAB如何计算答案。近期在复习考研&#xff0c;以此来巩固一下相关知识——虽然考研肯定不能用MATLAB代码哈哈&#xff0c;不过在实际应用中解决问题还是很不错的&#xff0c;比C易上手得多~ 图论中的图&#xff08;Graph&#xf…...

手把手教你用Cursor的.cursorrules文件,定制你的专属Python/React开发AI伙伴

用.cursorrules文件打造你的智能编程伙伴&#xff1a;Python/React开发者的终极配置指南 在当今快节奏的软件开发环境中&#xff0c;AI编程助手已经成为提升效率的必备工具。而Cursor作为其中的佼佼者&#xff0c;其真正的威力往往被大多数开发者所低估——通过精心设计的.curs…...

3步搞定黑苹果配置:OpCore-Simplify让你告别复杂手动调试的终极解决方案

3步搞定黑苹果配置&#xff1a;OpCore-Simplify让你告别复杂手动调试的终极解决方案 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify 还在为黑苹果配置…...

科普大白话:布尔代数

你好呀&#xff0c;我是布尔代数。别一听到“代数”两个字就想逃跑——我和那个满脑子都是 xx 和 yy 的普通代数可不是同一个物种。如果说普通代数像一台精密的体重秤&#xff0c;总在计算“你有多少”的话&#xff0c;那我更像一个简单又果断的裁判&#xff0c;只关心一件事&a…...

dbgpt7.0 docker部署实战:从基础配置到高级定制

1. 环境准备与基础部署 DB-GPT 7.0作为新一代企业级AI开发框架&#xff0c;其Docker化部署方案大幅降低了使用门槛。我们先从最基础的运行环境搭建说起&#xff0c;这里我推荐使用Ubuntu 22.04 LTS作为宿主系统&#xff0c;这个版本对NVIDIA GPU的支持最为友好。实测在16GB内存…...

阿里Qwen3-VL-WEBUI实战:从零配置GPU环境,开启多模态AI应用

阿里Qwen3-VL-WEBUI实战&#xff1a;从零配置GPU环境&#xff0c;开启多模态AI应用 1. 引言 1.1 为什么选择Qwen3-VL-WEBUI 想象一下&#xff0c;你正在开发一个智能客服系统&#xff0c;需要同时理解用户上传的产品图片和文字描述&#xff0c;然后生成专业的回复。或者你希…...

C++高性能接口开发:美胸-年美-造相Z-Turbo加速方案

C高性能接口开发&#xff1a;美胸-年美-造相Z-Turbo加速方案 1. 引言 想象一下&#xff0c;你正在开发一个图像生成应用&#xff0c;用户输入文字描述&#xff0c;系统需要在不到一秒内生成高清图片。传统的Python接口虽然开发简单&#xff0c;但在高并发场景下性能瓶颈明显&…...

Cursor Pro完全激活指南:终极免费解锁AI编程体验

Cursor Pro完全激活指南&#xff1a;终极免费解锁AI编程体验 【免费下载链接】cursor-free-vip [Support 0.45]&#xff08;Multi Language 多语言&#xff09;自动注册 Cursor Ai &#xff0c;自动重置机器ID &#xff0c; 免费升级使用Pro 功能: Youve reached your trial re…...

深入解析Python-docx中的run对象及其样式控制

1. 初识Python-docx中的run对象 第一次接触Python-docx库时&#xff0c;很多人会被文档中各种对象搞得晕头转向。今天我们就来聊聊其中最基础但也最重要的run对象。简单来说&#xff0c;run就是文档中具有相同样式的一段文本。想象一下你在Word里编辑文档&#xff1a;当你改变字…...

Speech Seaco Paraformer效果展示:高清录音转文字案例与置信度分析

Speech Seaco Paraformer效果展示&#xff1a;高清录音转文字案例与置信度分析 1. 引言 你有没有遇到过这样的场景&#xff1f;一场重要的会议录音&#xff0c;想要整理成文字稿&#xff0c;结果发现听一句、暂停、打字、再听一句……一个小时的内容&#xff0c;整理起来要花…...

网络安全防护:AnythingtoRealCharacters2511 API接口安全设计

网络安全防护&#xff1a;AnythingtoRealCharacters2511 API接口安全设计 1. 企业级API安全的重要性 在现代AI服务架构中&#xff0c;API接口作为核心业务入口&#xff0c;面临着各种网络安全威胁。AnythingtoRealCharacters2511作为动漫转真人图像生成服务&#xff0c;其API…...