亚马逊评论爬虫+数据分析

爬取评论
做分析首先得有数据,数据是核心,而且要准确!

1、爬虫必要步骤,选好框架
2、开发所需数据
3、最后测试流程
这里我所选框架是selenium+request,很多人觉得selenium慢,确实不快,仅针对此项目我做过测试,相对于request要快,要方便一些!也可以用你们熟悉的框架,用的趁手就行!
最核心的要采用无浏览器模式,这样会快很多
安装浏览器对应webdriver版本

http://npm.taobao.org/mirrors/chromedriver/

获取评论数,评级数, 监控评论
·亚马逊产品评论分为5个等级,从1到5

    def get_review_summarys(self):# 解析评论星级def parse(site, asin, rating, html):# 解析评论星级selector = etree.HTML(html)title = select(selector, "//a[@data-hook='product-link']/text()", 0, None)if not title:return site, asin, self.parent_asin, None, None, None, Nonereview_rating_count = select(selector, "//div[@data-hook='cr-filter-info-review-rating-count']/span/text()",0,None)if review_rating_count:review_rating_count = [s.strip() for s in review_rating_count.split("|")]rating_count = int(review_rating_count[0].split(" ")[0].replace(",", ""))review_count = int(review_rating_count[1].split(" ")[0].replace(",", ""))only_rating_count = rating_count - review_countelse:rating_count = Nonereview_count = Noneonly_rating_count = Noneprint(site, asin, rating, rating_count, review_count, only_rating_count, sep="\t")return site, asin, rating, rating_count, review_count, only_rating_countself.review_summarys = []run_successfully = 1star_map = {1: "one_star", 2: "two_star", 3: "three_star", 4: "four_star", 5: "five_star"}url_map = {"parent": "{}product-reviews/{}/?language={}&filterByStar={}&reviewerType=all_reviews"}try:for rating, star in star_map.items():index_url = 'https://www.amazon.com/'language = 'ref=cm_cr_arp_d_viewopt_sr?ie=UTF8'url_format = url_map.get(self.parent_asin,"{}product-reviews/{}/?language={}&filterByStar={}&reviewerType=all_reviews&formatType=current_format")self.re_url = url_format.format(index_url,self.asin, language, star)res = requests.get(self.re_url, headers=headers).textself.rating = ratingreview_summary = parse(self.site, self.asin, self.rating,res)self.review_summarys.append(review_summary)except Exception as err:print("请求中断:{}".format(err))run_successfully = 0finally:return run_successfully, self.review_summarys

获取评论内容

    def get_main_information(self):# 等待页面加载完毕while True:try:WebDriverWait(self.driver, 30).until(EC.presence_of_element_located((By.ID, 'cm_cr-review_list')))breakexcept Exception as e:print(e)self.driver.refresh()continueus = self.driver.find_element_by_id("cm_cr-review_list")# 获取每页的全部评论信息text = self.driver.page_sourceselector = etree.HTML(text)self.review_detail = []try:reviews = selector.xpath("//div[@data-hook='review']")for review in reviews:review_id = select(review, "./@id", 0, "")customer = select(review, ".//span[@class='a-profile-name']/text()", 0, "")review_title = select(review, ".//*[@data-hook='review-title']/span/text()", 0, "")review_date = select(review, ".//span[contains(@*,'review-date')]/text()", 0, None)if review_date:li = re.findall("\d+.\d+.\d+.\d+.", review_date)[0]yyyy = re.findall('\d\d\d\d',li)[0]mm = re.findall('年(\d+)',li)[0]dd = re.findall('月(\d+)',li)[0]review_date = "{}-{}-{}".format(yyyy, mm, dd)else:review_date = Noneverified_purchase = select(review, ".//span[@data-hook='avp-badge']/text()", 0, "")review_body = select(review, ".//span[@data-hook='review-body']/span/text()")review_rating = select(review, ".//i[contains(@data-hook, 'review-star-rating')]/span/text()", 0, "")review_rating = int(float(review_rating.split(" ")[0].replace(",", "."))) if review_rating else Nonereview_href = select(review, ".//a[@class='a-link-normal']/@href", 0, "")review_href = review_href if review_id in review_href else ""index_url = 'https://www.amazon.com/'review_url = index_url + review_href[1:] if review_href else ""asin = re.findall('ASIN=(.*)',review_url)[0]print(self.site,asin,self.product_name,review_id, customer, review_title, review_date,verified_purchase, review_body,review_rating, review_url, sep="\n")print("----------------------------------------------------------------------------------------------")self.review_detail.append((self.site,asin,self.product_name,review_id, customer, review_title, review_date,verified_purchase,review_body,review_rating, review_url))except Exception as e:print(e)# 判断是否还有下一页next_pagetry:WebDriverWait(self.driver, 5).until(EC.element_to_be_clickable((By.XPATH, '//li[@class = "a-last"]/a')))self.next_page = us.find_element_by_xpath('.//li[@class = "a-last"]/a').get_attribute("href")except NoSuchElementException:self.driver.find_elements_by_xpath('//li[@class = "a-disabled a-last"]')self.next_page = Noneprint("未有下一页")except TimeoutException:self.next_page = Noneself.driver.refresh()
- 数据存储方式建议大家使用mysql,如果只是测试玩玩就用csv或者excel

数据有了,下面我们开始分析,怎么分析呢?这里我用到是tableau-BI工具,要结合业务需求来选择工具,BI更适合公司开发业务,实现企业化!

1、每日星级变动分析:评论数,星级数
每天实时更新评级数,把爬虫放到服务器上写一个定时任务!
通过tableau展示可视化报表

2、评论监控
每日实时更新有变动的评论数,评级数
重新建表,把计算逻辑写到函数中,通过比对的方法实现变动
在这里插入图片描述

3、最后通过BI展示
在这里插入图片描述
定时任务

def get_ratings(h=7, m=30):while True:now = datetime.datetime.now()# print(now.hour, now.minute)if now.hour == h and now.minute == m:spider_main()# 每隔60秒检测一次time.sleep(60)if __name__ == '__main__':# get_reviews()get_ratings()

本文章若对你有帮助,烦请点赞,收藏,关注支持一下!
各位的支持和认可就是我最大的动力!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/886003.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

RK3588 C++ 多线程运行

RK3588 C 多线程 实际运行解决OpenCV问题: 1. OpenCV 安装 sudo apt-get update sudo apt-get install libopencv-dev2. 检查 OpenCV 安装路径 find / -name OpenCVConfig.cmake3. 设置 OpenCV_DIR 环境变量 export OpenCV_DIR/usr/lib/aarch64-linux-gnu/cmake/op…

【已解决】Parameter index out of range (14 > number of parameters, which is 13).

解决思路: 字面意思就是sql传参数量对不上,但我检查几遍代码都感觉没问题,sql单独拿到mysql里运行也没问题。看了其他的报错:Error setting non null for parameter #2 with JdbcType null,看起来也是跟参数有关的&am…

MDBook 使用指南

MDBook 是一个灵感来自 Gitbook 的强大工具,专门用于创建电子书和文档。它能够将 Markdown 编写的内容编译成静态网站,非常适合项目文档、教程和书籍的发布。 个人实践过许多文档方案,如 hexo、hugo、WordPress、docsify 和 mdbook 等&#…

vue计算属性 初步使用案例

<template><div><h1>购物车</h1><div v-for"item in filteredItems" :key"item.id"><p>{{ item.name }} - {{ item.price }} 元</p><input type"number" v-model.number"item.quantity"…

C++编程技巧与规范-类和对象

类和对象 1. 静态对象的探讨与全局对象的构造顺序 静态对象的探讨 类中的静态成员变量(类类型静态成员) 类中静态变量的声明与定义&#xff08;类中声明类外定义&#xff09; #include<iostream> using namespace std;namespace _nmspl {class A{public:A():m_i(5){…

如何在 Ubuntu 上安装 RStudio IDE(R语言集成开发环境) ?

RStudio 是一个功能强大的 R 语言集成开发环境(IDE)&#xff0c;R 是一种主要用于统计计算和数据分析的编程语言。任何从事数据科学项目或任何其他涉及 R 的类似任务的人&#xff0c;RStudio 都可以使您的工作更轻松。 本指南将引导您完成在 Ubuntu 系统上安装 RStudio 的过程…

高中数学:概率-相关运算性质

文章目录 一、概率定义二、运算性质三、事件相互独立四、频率与概率五、练习 一、概率定义 二、运算性质 基本性质 互斥事件的性质 对立事件性质 包含事件的性质 有交集但不包含的事件性质 三、事件相互独立 注意&#xff1a; 四、频率与概率 五、练习

VM安装Ubuntu详细配置

1、第一步修改阿里源&#xff1a;打开软件 与更新&#xff0c;更改下载自为&#xff1a;http://mirrors.aliyun.co/ubuntu 2、安装open-vm-tools: 安装两个文件&#xff1a;sudo api install open-vm-tools open-vm-tools-desktop 3、安装搜狗输入法&#xff1a;点击下载 a、…

乒乓球筐(多组输入模板)

乒乓球筐 import java.util.Scanner;// 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNext()) {int[] hash new i…

AI 写作(五)核心技术之文本摘要:分类与应用(5/10)

一、文本摘要&#xff1a;AI 写作的关键技术 文本摘要在 AI 写作中扮演着至关重要的角色。在当今信息爆炸的时代&#xff0c;人们每天都被大量的文本信息所包围&#xff0c;如何快速有效地获取关键信息成为了一个迫切的需求。文本摘要技术正是为了解决这个问题而诞生的&#x…

TCP 三次握手意义及为什么是三次握手

✨✨✨励志成为超级技术宅 ✨✨✨ TCP的三次握手在笔试和面试中经常考察&#xff0c;非常重要&#xff0c;那么大家有没有思考过为什么是三次握手&#xff0c;俩次握手行不行呢&#xff1f;四次握手行不行呢&#xff1f;如果大家有疑问或者不是很理解&#xff0c;那么这篇博客…

初识算法 · 位运算(2)

目录 前言&#xff1a; 判定字符是否唯一 丢失的数字 比特位计数 只出现一次的数字III 前言&#xff1a; ​本文的主题是位运算&#xff0c;通过四道题目讲解&#xff0c;一道是判断字符是否唯一&#xff0c;一道是只出现一次的数字III&#xff0c;一道是比特位计数&…

Unity Assembly Definition Assembly Definition Reference

文章目录 1.Unity 预定义程序集2.Assembly definition3. Assembly definitions相关实验 1.Unity 预定义程序集 Unity 有4个预定义程序集&#xff1a; 阶段程序集名脚本文件1Assembly-CSharp-firstpassStandard Assets, Pro Standard Assets和Plugins文件夹下面的运行时脚本2A…

【征稿倒计时!华南理工大学主办 | IEEE出版 | EI检索稳定】2024智能机器人与自动控制国际学术会议 (IRAC 2024)

#华南理工大学主办&#xff01;#IEEE出版&#xff01;EI稳定检索&#xff01;#组委阵容强大&#xff01;IEEE Fellow、国家杰青等学术大咖领衔出席&#xff01;#会议设置“优秀论文”“优秀青年学者报告”“优秀海报”等评优奖项 2024智能机器人与自动控制国际学术会议 &#…

[CKS] Create/Read/Mount a Secret in K8S

最近准备花一周的时间准备CKS考试&#xff0c;在准备考试中发现有一个题目关于读取、创建以及挂载secret的题目。 ​ 专栏其他文章: [CKS] Create/Read/Mount a Secret in K8S-CSDN博客[CKS] Audit Log Policy-CSDN博客 -[CKS] 利用falco进行容器日志捕捉和安全监控-CSDN博客[C…

5个非LLM软件趋势

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

社会工程骗局席卷金融机构

2024 年北美金融机构收到的社交工程诈骗报告数量比一年前增加了 10 倍。数据显示&#xff0c;诈骗现在占所有数字银行欺诈的 23%。 深度伪造和 GenAI 诈骗的危险日益增加 BioCatch 在其 2024 年北美数字银行欺诈趋势报告中公布了这些发现&#xff0c;该报告还详细说明了报告的…

读数据质量管理:数据可靠性与数据质量问题解决之道03数据目录

1. 同步数据 1.1. 不同的数据仓库和数据湖通过数据集成层来进行桥接 1.2. AWS Glue、Fivetran和Matillion等数据集成工具从不同来源收集数据&#xff0c;统一这些数据&#xff0c;并将其转换为上游来源 1.3. 数据集成的一个典型用例是收集数据湖的数据并以结构化格式将其加载…

【数据库】数据库迁移的注意事项有哪些?

数据库迁移是一个复杂且关键的过程&#xff0c;需要谨慎处理以确保数据的完整性和应用程序的正常运行。以下是一些数据库迁移时需要注意的事项&#xff1a; 1. 充分的前期准备 1.1 评估迁移需求 明确目标&#xff1a;确定迁移的具体目标&#xff0c;例如添加新字段、修改现…

LabVIEW开发相机与显微镜自动对焦功能

自动对焦是显微成像系统中的关键功能&#xff0c;通常由显微镜的电动调焦模块或特定的镜头系统提供&#xff0c;而工业相机则主要用于高分辨率图像的采集&#xff0c;不具备独立的自动对焦功能。以下是自动对焦的工作原理、实现方式及实际应用案例。 1. 自动对焦的工作原理 &a…