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

使用Puppeteer爬取地图上的用户评价和评论

亿牛云代理

导语

在互联网时代,获取用户的反馈和意见是非常重要的,它可以帮助我们了解用户的需求和喜好,提高我们的产品和服务质量。有时候,我们需要从地图上爬取用户对某些地点或商家的评价和评论,这样我们就可以分析用户对不同地区或行业的态度和偏好。但是,如何从地图上爬取用户评价和评论呢?本文将介绍一种使用Puppeteer的方法,它是一个基于Node.js的库,可以控制Chrome或Chromium浏览器进行各种操作,包括爬虫。

概述

Puppeteer是一个非常强大的库,它可以模拟用户在浏览器中的行为,比如打开网页、点击按钮、输入文本、滚动页面等。它还可以截取网页的屏幕截图或PDF文件,以及获取网页的DOM元素和内容。使用Puppeteer爬取地图上的用户评价和评论的基本思路是:

  • 首先,使用Puppeteer启动一个浏览器实例,并设置代理IP,以避免被目标网站识别和封禁。
  • 然后,使用Puppeteer打开目标网站的地图页面,并输入要搜索的地点或商家名称。
  • 接着,使用Puppeteer获取搜索结果中的第一个条目,并点击进入详情页面。
  • 最后,使用Puppeteer获取详情页面中的用户评价和评论,并保存到本地文件或数据库中。

正文

下面我们将详细介绍使用Puppeteer爬取地图上的用户评价和评论的具体步骤和代码。

1. 安装Puppeteer

首先,我们需要安装Puppeteer库,可以使用npm命令进行安装:

// 安装Puppeteer库
npm i puppeteer

2. 启动浏览器并设置代理IP

然后,我们需要启动一个浏览器实例,并设置代理IP。我们可以使用亿牛云爬虫代理服务来获取高质量的代理IP,它提供了多种类型和地区的代理IP,并且支持多种协议和认证方式。我们可以在亿牛云爬虫代理平台上注册一个账号,并获取自己的域名、端口、用户名和密码。然后,我们可以使用以下代码来启动浏览器并设置代理IP:

// 引入Puppeteer库
const puppeteer = require('puppeteer');// 亿牛云 定义爬虫代理IP相关参数
const proxyDomain = 'www.16yun.cn'; // 爬虫代理域名
const proxyPort = '8100'; // 爬虫代理端口
const proxyUsername = '16IP'; // 爬虫代理用户名
const proxyPassword = '16YUN'; // 爬虫代理密码// 启动浏览器并设置代理IP
(async () => {const browser = await puppeteer.launch({args: [`--proxy-server=http://${proxyDomain}:${proxyPort}`, // 设置代理服务器地址和端口`--proxy-auth=${proxyUsername}:${proxyPassword}`, // 设置代理服务器认证信息],headless: false, // 设置为非无头模式,方便调试});
})();

3. 打开目标网站并搜索地点或商家

接着,我们需要打开目标网站的地图页面,并输入要搜索的地点或商家名称。我们以百度地图为例,我们可以使用以下代码来打开百度地图并搜索“北京饭店”:

// 引入Puppeteer库
const puppeteer = require('puppeteer');// 亿牛云 定义爬虫代理IP相关参数
const proxyDomain = 'www.16yun.cn'; // 爬虫代理域名
const proxyPort = '8100'; // 爬虫代理端口
const proxyUsername = '16IP'; // 爬虫代理用户名
const proxyPassword = '16YUN'; // 爬虫代理密码// 启动浏览器并设置代理IP
(async () => {const browser = await puppeteer.launch({args: [`--proxy-server=http://${proxyDomain}:${proxyPort}`, // 设置代理服务器地址和端口`--proxy-auth=${proxyUsername}:${proxyPassword}`, // 设置代理服务器认证信息],headless: false, // 设置为非无头模式,方便调试});// 打开一个新的页面const page = await browser.newPage();// 设置页面的视口大小await page.setViewport({ width: 1280, height: 800 });// 打开百度地图的网址await page.goto('https://map.baidu.com/');// 等待搜索框出现await page.waitForSelector('#sole-input');// 输入要搜索的地点或商家名称await page.type('#sole-input', '北京饭店');// 点击搜索按钮await page.click('#search-button');
})();

4. 获取搜索结果并点击详情页面

然后,我们需要获取搜索结果中的第一个条目,并点击进入详情页面。我们可以使用以下代码来获取搜索结果并点击详情页面:

const puppeteer = require('puppeteer'); // 引入Puppeteer库// 亿牛云 定义爬虫代理IP相关参数
const proxyDomain = 'www.16yun.cn'; // 爬虫代理域名
const proxyPort = '8100'; // 爬虫代理端口
const proxyUsername = '16IP'; // 爬虫代理用户名
const proxyPassword = '16YUN'; // 爬虫代理密码(async () => {const browser = await puppeteer.launch({args: [`--proxy-server=http://${proxyDomain}:${proxyPort}`, // 设置代理服务器地址和端口`--proxy-auth=${proxyUsername}:${proxyPassword}`, // 设置代理服务器认证信息],headless: false, // 设置为非无头模式,方便调试});const page = await browser.newPage(); // 打开一个新的页面await page.setViewport({ width: 1280, height: 800 }); // 设置页面的视口大小await page.goto('https://map.baidu.com/'); // 打开百度地图的网址await page.waitForSelector('#sole-input'); // 等待搜索框出现await page.type('#sole-input', '北京饭店'); // 输入要搜索的地点或商家名称await page.click('#search-button'); // 点击搜索按钮await page.waitForSelector('.se-bn-list'); // 等待搜索结果出现const firstResult = await page.evaluate(() => {const title = document.querySelector('.se-bn-list .se-bn-item .se-bn-name').innerText; // 获取搜索结果中的第一个条目的标题文本const link = document.querySelector('.se-bn-list .se-bn-item .se-bn-name').href; // 获取搜索结果中的第一个条目的链接地址return { title, link }; // 返回第一个条目的标题和链接对象});console.log(firstResult); // 打印第一个条目的标题和链接对象await Promise.all([page.waitForNavigation(), // 等待页面跳转完成page.click('.se-bn-list .se-bn-item .se-bn-name'), // 点击第一个条目进入详情页面]);await page.waitForSelector('.place-header-title'); // 等待详情页面加载完成const detailInfo = await page.evaluate(() => {const title = document.querySelector('.place-header-title').innerText; // 获取详情页面中的标题文本const address = document.querySelector('.place-address .se-text-clip').innerText; // 获取详情页面中的地址文本const phone = document.querySelector('.place-header-phone .se-float-left').innerText; // 获取详情页面中的电话文本return { title, address, phone }; // 返回详情页面中的标题、地址和电话对象});console.log(detailInfo); // 打印详情页面中的标题、地址和电话对象await browser.close(); // 关闭浏览器实例
})();

5. 获取详情页面中的用户评价和评论

最后,我们需要获取详情页面中的用户评价和评论,并保存到本地文件或数据库中。我们可以使用以下代码来获取详情页面中的用户评价和评论:

// 引入Puppeteer库
const puppeteer = require('puppeteer');// 亿牛云 定义爬虫代理IP相关参数
const proxyDomain = 'www.16yun.cn'; // 爬虫代理域名
const proxyPort = '8100'; // 爬虫代理端口
const proxyUsername = '16IP'; // 爬虫代理用户名
const proxyPassword = '16YUN'; // 爬虫代理密码// 启动浏览器并设置代理IP
(async () => {const browser = await puppeteer.launch({args: [`--proxy-server=http://${proxyDomain}:${proxyPort}`, // 设置代理服务器地址和端口`--proxy-auth=${proxyUsername}:${proxyPassword}`, // 设置代理服务器认证信息],headless: false, // 设置为非无头模式,方便调试});// 打开一个新的页面const page = await browser.newPage();// 设置页面的视口大小await page.setViewport({ width: 1280, height: 800 });// 打开百度地图的网址await page.goto('https://map.baidu.com/');// 等待搜索框出现await page.waitForSelector('#sole-input');// 输入要搜索的地点或商家名称await page.type('#sole-input', '北京饭店');// 点击搜索按钮await page.click('#search-button');// 等待搜索结果出现await page.waitForSelector('.se-bn-list');// 获取搜索结果中的第一个条目的标题和链接const firstResult = await page.evaluate(() => {const title = document.querySelector('.se-bn-list .se-bn-item .se-bn-name').innerText; // 获取标题文本const link = document.querySelector('.se-bn-list .se-bn-item .se-bn-name').href; // 获取链接地址return { title, link };});console.log(firstResult); // 打印第一个条目的标题和链接// 点击第一个条目进入详情页面await Promise.all([page.waitForNavigation(), // 等待页面跳转完成page.click('.se-bn-list .se-bn-item .se-bn-name'), // 点击第一个条目的标题链接]);// 等待详情页面加载完成await page.waitForSelector('.comment-list');// 获取详情页面中的用户评价和评论const comments = await page.evaluate(() => {const commentList = document.querySelectorAll('.comment-list .comment-item'); // 获取所有评论元素const comments = []; // 定义一个空数组用于存储评论数据for (let comment of commentList) {const username = comment.querySelector('.user-name').innerText; // 获取用户名文本const rating = comment.querySelector('.star-score').innerText; // 获取评分文本const content = comment.querySelector('.comment-content').innerText; // 获取评论内容文本comments.push({ username, rating, content }); // 将评论数据添加到数组中}return comments; // 返回评论数据数组});console.log(comments); // 打印评论数据数组// 关闭浏览器实例await browser.close();
})();

我们可以运行上述代码,并查看输出结果。我们成功地从百度地图上爬取了北京饭店的用户评价和评论,并打印到了控制台中。我们可以根据自己的需要,将这些数据保存到本地文件或数据库中,以便后续分析和使用。

结语

本文介绍了一种使用Puppeteer爬取地图上的用户评价和评论的方法,它可以帮助我们获取用户的反馈和意见,分析用户的需求和喜好。我们可以根据不同的目标网站和搜索条件,修改相应的代码,以实现更多的爬虫功能。希望本文对你有所帮助,谢谢阅读。

相关文章:

使用Puppeteer爬取地图上的用户评价和评论

导语 在互联网时代,获取用户的反馈和意见是非常重要的,它可以帮助我们了解用户的需求和喜好,提高我们的产品和服务质量。有时候,我们需要从地图上爬取用户对某些地点或商家的评价和评论,这样我们就可以分析用户对不同…...

GLSL ES着色器语言 使用矢量和矩阵的相关规范

目录 矢量和矩阵类型 下面是声明矢量和矩阵的例子: 赋值和构造 矢量构造函数 矩阵构造函数 构造矩阵的几种方式 访问元素 . 运算符 矢量的分量名 [ ]运算符 运算符 矢量和矩阵可用的运算符 矢量和矩阵相关运算 矢量和浮点数的…...

Himall商城- web私有方法

目录 1 Himall商城- web私有方法 1.1 /// 获取售价 1.1.1 //商品批量销售价 1.1.2 //获取组合购的价格 Himall商城- web私有方法 #region web私有方法 /// <summary> /// 获取售价 /// <para>己计算会员折</para> /// </summary> /// <para…...

Spring Boot 整合 Redis,使用 RedisTemplate 客户端

文章目录 一、SpringBoot 整合 Redis1.1 整合 Redis 步骤1.1.1 添加依赖1.1.2 yml 配置文件1.1.3 Config 配置文件1.1.4 使用示例 1.2 RedisTemplate 概述1.2.1 RedisTemplate 简介1.2.2 RedisTemplate 功能 二、RedisTemplate API2.1 RedisTemplate 公共 API2.2 String 类型 A…...

Tomcat 接收请求并传递给工作线程池流程

文章目录 Tomcat 接收请求并传递给工作线程池流程接收 socket 连接 org.apache.tomcat.util.net.SocketProcessorBase#reset结论 Tomcat 接收请求并传递给工作线程池流程 接收 socket 连接 有两个线程 http-nio-8080-ClientPoller-0/1 &#xff08;下文称为 clientPoller&…...

在Linux系统上用C++将主机名称转换为IPv4、IPv6地址

在Linux系统上用C将主机名称转换为IPv4、IPv6地址 功能 指定一个std::string类型的主机名称&#xff0c;函数解析主机名称为IP地址&#xff0c;含IPv4和IPv6&#xff0c;解析结果以std::vector<std::string>类型返回。解析出错或者解析失败抛出std::string类型的异常消…...

【硬件设计】硬件学习笔记二--电源电路设计

硬件学习笔记二--电源电路设计 一、LDO设计1.1 LDO原理1.2 LDO参数1.3 应用 二、DC-DC设计2.1 DC-DC原理2.2 DC-DC参数介绍2.4 DC-DC设计要点2.5 DC-DC设计注意事项 写在前面&#xff1a;本篇笔记来自王工的硬件工程师培训课程&#xff0c;想要学硬件的同学可以去腾讯课堂直接搜…...

day34 集合总结

集合总结 一、概述 作用&#xff1a;存储对象的容器&#xff0c;代替数组的&#xff0c;使用更加的便捷 所处的位置&#xff1a;java.util 体系结构 二、Collection 内部的每一个元素都得是引用数据类型 常用方法 add(Object o) 添加元素 addAll(Collection c) 将指定集…...

【JAVA】 图书管理系统(javaSE简易版 内含画图分析) | 期末大作业课程设计

作者主页&#xff1a;paper jie 的博客 本文作者&#xff1a;大家好&#xff0c;我是paper jie&#xff0c;感谢你阅读本文&#xff0c;欢迎一建三连哦。 本文录入于《JAVA》专栏&#xff0c;本专栏是针对于大学生&#xff0c;编程小白精心打造的。笔者用重金(时间和精力)打造&…...

区块链技术与应用 - 学习笔记3【比特币数据结构】

大家好&#xff0c;我是比特桃。本系列笔记只专注于探讨研究区块链技术原理&#xff0c;不做其他违反相关规定的讨论。 区块链技术已被纳入国家十四五规划&#xff0c;在“加快数字发展 建设数字中国”篇章中&#xff0c;区块链被列为“十四五”七大数字经济重点产业之一&#…...

Ubuntu下高效Vim的搭建(离线版)

软件界面 可以看到界面下方有一些常用提示信息&#xff1a;文件路径、format、文件类型、光标所在的坐标(x,y)、进度条(百分比)、日期时间 会提示已定义的变量名词(快速补全) 搭建方法 下载资源文件 把Vim 和 .vimrc 拷贝到家目录下&#xff0c;并执行tar -xvf Vim 即可。 …...

阿里云和腾讯云2核2G服务器价格和性能对比

2核2G云服务器可以选择阿里云服务器或腾讯云服务器&#xff0c;腾讯云轻量2核2G3M带宽服务器95元一年&#xff0c;阿里云轻量2核2G3M带宽优惠价108元一年&#xff0c;不只是轻量应用服务器&#xff0c;阿里云还可以选择ECS云服务器u1&#xff0c;腾讯云也可以选择CVM标准型S5云…...

PYTHON(一)——认识python、基础知识

一、为什么要学习python&#xff1f; Python 被认为是人工智能、机器学习的首选语言&#xff0c;可以说是全世界最流行通用范围最广的语言&#xff0c;几乎可以完成所有的任务&#xff0c;像设计游戏、建网站、造机器人甚至人工智能等都广泛使用Python。 二、输出&#xff08;…...

Python 操作 Excel

之前看过一篇文章&#xff0c;说一个工作多年的老员工&#xff0c;处理数据时只会用复制粘贴到 Excel &#xff0c;天天加班工作还完不成&#xff0c;后来公司就招了一个会 Python 的新人&#xff0c;结果分分钟就处理完成。所以工作中大家经常会使用 Excel 去处理以及展示数据…...

21.添加websocket模块

这里默认读者了解websocket协议&#xff0c;若是还不了解可以看下这篇文章wesocket协议。 websocket主要有三个步骤&#xff0c;1通过HTTP进行握手连接&#xff0c;2进行双向通信&#xff0c;3.协商断开连接 第一步的握手连接需要HTTP&#xff0c;所以还需要使用到上一节讲解…...

Linux UDP编程流程

文章目录 UDP编程流程UDP协议无连接的特点UDP协议数据报的特点 UDP编程流程 UDP 提供的是无连接、不可靠的、数据报服务。服务器端和客户端没有什么本质上的区别。编程流程如下&#xff1a; socket()用来创建套接字&#xff0c;使用 udp 协议时&#xff0c;选择数据报服务 SOC…...

【opencv】多版本安装

安装opencv3.2.0以及对应的付费模块 一、安装多版本OpenCV如何切换 按照如下步骤安装的OpenCV&#xff0c;在CMakeLists.txt文件中&#xff0c;直接指定opencv的版本就可以找到相应版本的OpenCV&#xff0c;为了验证可以在CMakeLists.txt文件中使用如下指令输出版本验证&…...

webpack打包常用配置项

webpack打包配置项 参考链接 文件结构&#xff1a;最基础版 先安装 npm i webpack webpack-cli --dev 运行命令&#xff1a;npx webpack 进行打包 1. 配置webpack.config.js文件&#xff1a; const path require(path); module.exports {mode: development, // 开发环境 …...

回归预测 | MATLAB实现MPA-BiGRU海洋捕食者算法优化双向门控循环单元多输入单输出回归预测(多指标,多图)

回归预测 | MATLAB实现MPA-BiGRU海洋捕食者算法优化双向门控循环单元多输入单输出回归预测&#xff08;多指标&#xff0c;多图&#xff09; 目录 回归预测 | MATLAB实现MPA-BiGRU海洋捕食者算法优化双向门控循环单元多输入单输出回归预测&#xff08;多指标&#xff0c;多图&a…...

selenium_webdriver自动化测试指南

目录 1 引言 4 1.1 目的.. 4 1.2 背景.. 4 1.3 参考资料.. 4 2 安装并引用Selenium2. 5...

红米Note12Turbo解锁BL刷入PixelExperience原生ROM系统详细教程

红米Note12Turbo的兄弟是国外POCO F5 机型&#xff0c;并且该机性价比非常高&#xff0c;国内外销量也还可以&#xff0c;自然不缺第三方ROM适配。目前大家心心念念的原生PixelExperience已成功发布&#xff0c;并且相对来说&#xff0c;适配程度较高&#xff0c;已经达到日用的…...

NoSQL之Redis配置与优化(一)

关系数据库与非关系型数据库 &#xff1a; ●关系型数据库&#xff1a; 关系型数据库是一个结构化的数据库&#xff0c;创建在关系模型&#xff08;二维表格模型&#xff09;基础上&#xff0c;一般面向于记录。 SQL 语句&#xff08;标准数据查询语言&#xff09;就是一种基于…...

Boost搜索引擎

项目背景 先说一下什么是搜索引擎,很简单,就是我们平常使用的百度,我们把自己想要所有的内容输入进去,百度给我们返回相关的内容.百度一般给我们返回哪些内容呢?这里很简单,我们先来看一下. 搜索引擎基本原理 这里我们简单的说一下我们的搜索引擎的基本原理. 我们给服务器发…...

侧边栏的文章分类、热门文章和热门文章的展示(Go 搭建 qiucode.cn 之九)

早就有言,秋码记录 虽早已不是原来的面貌,但这终究是不防碍我们使用golang来搭建它。 而又为什么是使用golang呢?并非是其他编程语言呢?想必 时候回答【我为什么要学习 Go 语言(golang)】这个问题了 已经给出了答案! 当然,当初学习golang时,不单单是为了搭建一个博客应…...

LeetCode——贪心篇(二)

刷题顺序及思路来源于代码随想录&#xff0c;网站地址&#xff1a;https://programmercarl.com 134. 加油站 在一条环路上有 n 个加油站&#xff0c;其中第 i 个加油站有汽油 gas[i] 升。 你有一辆油箱容量无限的的汽车&#xff0c;从第 i 个加油站开往第 i1 个加油站需要消耗…...

Linux find

1.find介绍 linux查找命令find是linux运维中很重要、很常用的命令之一&#xff0c;find用于根据指定条件的匹配参数来搜索和查找文件和目录列表&#xff0c;我们可以通过权限、用户、用户组、文件类型、日期、大小等条件来查找文件。 2.find语法 find语法 find [查找路径] …...

UE4实现断线重连功能

断线重连的整体逻辑是 设备离线后&#xff0c;根据需要决定是否保留pawn&#xff0c;还是设备重连后再重新生成一个&#xff0c;然后是断线重连时的验证方式&#xff0c;最后是playerstate重连后的属性保留 重载Playercontroller的PawnLeavingGame,这里是设备断线后&#xff0…...

nginx笔记

1. nginx 简介 nginx性能比apache强&#xff0c;体现 在io模型方面 76 Pv&#xff1a; UV : 不同浏览器是不同的UV GET 获取 POST 上传 HEAT 只看头 访问网站的流程 1.dns解析 2.cdn 3.tcp 4.web服务器 处理 建立连接 接收请求 处理请求 GET POST等 获取资源 构…...

动态库的制作和使用

动态库和静态库的工作原理 配置环境变量 方式1&#xff1a; 坏处&#xff1a;环境变量是临时的 方式2&#xff1a; 1 用户级别的配置&#xff1a; 进入到/home&#xff0c;找到.bashrc&#xff0c;进入 先去找到库的路径 然后再到.bashrc最后一行输入路径 使其生效 2 系统…...

AWS Glue Pyspark+Athena基础学习汇总

Pyspark 基础学习汇总篇🍎 一、AWS 架构 ① AWS Glue:工作平台,包括脚本的编写以及管理脚本的运行状态以及调度等(主要:数据库配置、ETL和数据转换脚本编写、调度) ② Amazon S3 数据湖(数仓):数据的存储 ③ Athena:(雅典娜)SQL直接编写查询工作台(会产生费用) ④ Q…...

建设项目管理公司网站/广告推广的软件

声明式编程需要底层或运行时环境支持。 声明式语言的关键词确定了执行的关键控制流。 表述编程语言是说明性的东西&#xff1b;而不是具体的执行方案。 通常他的执行由解释器进行。 In computer science, declarative programming is a programming paradigm—a style of build…...

html5网站建设方案/百度竞价推广怎么做

<script type"text/javascript">//正常版 // (function(){ // alert(好)//返回加 // })()(function(){alert(好好)}()); //正常版不能同时出现&#xff08;如果一起出现了下面也无法执行了&#xff0c;二者出现一个就可正常运行&#xff09;//特殊版 fu…...

企业网站打不开的原因/整合网络营销是什么

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼我:Baksmaling…我:加载资源表……我:加载。我:解码AndroidManifest。xml资源……从文件加载资源表:? / apktool /框架/ 1. apk我:加载。W:不能解码attr值,使用undecoded值:ns android,名称主题,值 0 x080d0018W:不能解码attr值,…...

河南中国建设银行官网站/如何查看网站权重

1、 安装android studio 1.5的时候&#xff0c;安装完打开闪退。 我把自己的jdk从1.8降到了1.7解决了。 2、 安装android studio的时候要指定android的目录和sdk的目录&#xff0c;注意这个时候android的目录一定要为空并且不能和sdk在同一个目录下。 我把android目录放在…...

网站建设两年免费维护/如何做百度免费推广

Android system recovery<3e> 注意看下有3E标志就是官方自带的~~一般官方自带3e的机子不能卡刷&#xff0c;只能线刷~~Volume up/down to move higlight:power button to selectreboot syetem nowapplyupdate from external storagewipe data/factory resetwipe cache pa…...

网站与网页/推广平台app

文章目录创建模型获取coredata 操作上下文环境基本操作写入查询修改常见的问题创建模型 1 创建.xcdatamodeld文件 2 添加entity, 并设置属性 3 create NSManagedObject Subclass &#xff0c;如图 获取coredata 操作上下文环境 (NSManagedObjectContext *)coredatagetCo…...