news 2026/6/4 1:19:48

第三章——爬虫工具场景之Python爬虫实战:电商评价爬取,挖掘消费洞察

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
第三章——爬虫工具场景之Python爬虫实战:电商评价爬取,挖掘消费洞察

在当今电商蓬勃发展的时代,电商评价已成为产品分析和市场调研的重要数据来源。消费者在购买产品后留下的评价,蕴含着对产品性能、质量、服务等多方面的真实反馈,这些信息对于企业优化产品、改进服务以及市场调研人员了解消费者需求和市场趋势具有极高的价值。接下来,我们就深入探讨如何使用Python实现电商评价的爬取。

一、课程引入:电商评价对产品分析和市场调研的价值

对于企业而言,电商评价是一面镜子,能够直观反映产品的优点与不足。通过分析大量评价,企业可以发现产品在功能设计、质量控制等方面存在的问题,进而有针对性地进行产品优化和改进。例如,某手机品牌通过分析用户评价发现许多用户反馈手机续航能力不足,从而在后续产品研发中加大了对电池技术的投入。

市场调研人员则可以从电商评价中挖掘消费者的潜在需求和市场趋势。比如,通过对美妆产品评价的分析,发现消费者对天然、无添加成分的关注度日益增加,这为企业调整产品定位和营销策略提供了重要依据。

二、需求分析

我们的任务是输入电商产品链接,通过编写爬虫程序获取该产品的用户评价数据,包括评价内容、评分、用户信息等。无论是大型综合电商平台,还是垂直领域的电商网站,都要能实现精准爬取。

三、核心功能拆解

  1. 页面请求:向电商产品的评价页面发送HTTP请求,获取包含评价信息的网页内容。
  2. 评价数据定位:在复杂的网页内容中,准确找到评价内容、评分、用户信息等数据所在位置。
  3. 数据清洗与整理:从网页中提取到的数据往往包含HTML标签、特殊字符等杂质,需要进行清洗和整理,将其转化为干净、可用的数据格式。

四、代码分步实现

导入requestsre(用于正则表达式)等库

importrequestsimportre
  • requests库:用于发送HTTP请求,获取网页内容,它提供了简洁的接口,方便模拟浏览器进行各种请求操作。
  • re库:即正则表达式库,用于在文本中进行模式匹配,帮助我们从复杂的网页文本中提取特定格式的数据。

发送请求获取电商产品评价页面,处理可能的反爬机制

以某电商平台为例,发送请求获取产品评价页面。为应对反爬机制,设置合理的请求头模拟浏览器行为。

product_url='https://example.com/product/12345'# 替换为实际产品链接headers={'User - Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'}response=requests.get(product_url,headers=headers)ifresponse.status_code==200:html_content=response.textelse:print(f'请求失败,状态码:{response.status_code}')
  • product_url:电商产品的链接,实际使用时需替换为真实链接。
  • headers:设置请求头,User - Agent模拟了一个常见的浏览器标识,增加爬虫的伪装性,降低被反爬机制拦截的风险。

使用正则表达式或BeautifulSoup定位评价内容、评分、用户信息等数据,注释匹配规则

这里以正则表达式为例进行数据定位和提取。假设评价内容在<div>标签内,且该标签具有class="comment - content"属性;评分在<span>标签内,且该标签具有class="score"属性;用户信息在<a>标签内,且该标签具有class="user - name"属性。

# 提取评价内容comment_pattern=re.compile(r'<div class="comment - content">(.*?)</div>',re.S)comments=re.findall(comment_pattern,html_content)# 提取评分score_pattern=re.compile(r'<span class="score">(.*?)</span>',re.S)scores=re.findall(score_pattern,html_content)# 提取用户信息user_pattern=re.compile(r'<a class="user - name">(.*?)</a>',re.S)users=re.findall(user_pattern,html_content)
  • re.compile(r'<div class="comment - content">(.*?)</div>', re.S):使用re.compile编译正则表达式,r'<div class="comment - content">(.*?)</div>'是具体的匹配模式。<div class="comment - content"></div>用于定位包含评价内容的<div>标签,(.*?)表示非贪婪模式匹配中间的任意内容,re.S表示使.匹配包括换行符在内的所有字符。
  • 评分和用户信息的正则表达式原理类似,分别根据对应的标签和属性来定位和提取数据。

清洗数据,去除HTML标签、特殊字符等,讲解字符串处理方法

importhtmldefclean_data(data_list):cleaned_data=[]fordataindata_list:# 去除HTML标签clean_data=re.sub(r'<.*?>','',data)# 转换HTML实体字符clean_data=html.unescape(clean_data)# 去除特殊字符和空白字符clean_data=re.sub(r'[\r\n\t\s]','',clean_data)cleaned_data.append(clean_data)returncleaned_data comments=clean_data(comments)scores=clean_data(scores)users=clean_data(users)
  • re.sub(r'<.*?>', '', data):使用re.sub函数,将字符串中的HTML标签替换为空字符串,从而去除HTML标签。
  • html.unescape(clean_data):将HTML实体字符(如&amp;表示&)转换为对应的实际字符。
  • re.sub(r'[\r\n\t\s]', '', clean_data):去除字符串中的回车符(\r)、换行符(\n)、制表符(\t)以及其他空白字符。

将整理后的数据存储到合适格式,如JSON

importjson data=[]foriinrange(len(comments)):comment_info={'用户':users[i],'评分':scores[i],'评价内容':comments[i]}data.append(comment_info)withopen('product_comments.json','w',encoding='utf - 8')asf:json.dump(data,f,ensure_ascii=False,indent=4)
  • 首先创建一个空列表data,然后通过循环将清洗后的用户、评分和评价内容组合成字典,并添加到data列表中。
  • 使用json.dump将数据列表写入product_comments.json文件,ensure_ascii=False确保中文字符正常显示,indent=4使JSON文件格式更美观,便于阅读。

五、优化迭代:应对电商平台频繁的页面结构变化,提高爬取稳定性

  1. 页面结构监测与更新:定期手动检查电商平台页面结构是否发生变化。可以设置一个监测周期,比如每周检查一次。一旦发现页面结构变化,重新分析评价数据所在位置,更新正则表达式或BeautifulSoup选择器。
  2. 多策略爬取:除了使用正则表达式,同时学习使用BeautifulSoupXPath等多种数据提取方法。当一种方法因页面结构变化失效时,可迅速切换到其他方法。例如,若正则表达式在某个电商平台更新后无法准确提取数据,尝试使用BeautifulSoup结合CSS选择器进行提取。

六、部署测试:对不同电商平台、不同产品进行爬取测试

  1. 不同电商平台测试:选择多个主流电商平台,如淘宝、京东、拼多多等,以及一些垂直领域电商平台,对不同类型产品进行评价爬取测试。检查爬取结果是否完整、准确,数据格式是否符合预期。
  2. 不同产品测试:针对同一电商平台的不同产品进行爬取测试。涵盖热门产品、冷门产品、不同品类产品等,确保爬虫在各种情况下都能稳定运行,获取到有效的评价数据。

七、问题排查:解决因反爬策略升级(如动态渲染页面)导致的无法获取评价数据问题

  1. 动态渲染页面处理:如果电商平台采用动态渲染页面技术(如使用JavaScript动态加载评价数据),传统的requests库可能无法直接获取到完整数据。此时可使用Selenium库结合浏览器驱动(如ChromeDriver)来模拟浏览器行为。
fromseleniumimportwebdriverfromselenium.webdriver.common.byimportByfromselenium.webdriver.support.uiimportWebDriverWaitfromselenium.webdriver.supportimportexpected_conditionsasEC driver=webdriver.Chrome()driver.get(product_url)try:element=WebDriverWait(driver,10).until(EC.presence_of_element_located((By.CLASS_NAME,'comment - content')))html_content=driver.page_source# 后续使用正则表达式或BeautifulSoup进行数据提取finally:driver.quit()

上述代码使用Selenium打开电商产品页面,通过WebDriverWait等待具有class="comment - content"的元素出现(最多等待10秒),确保动态内容加载完成后获取页面源代码,再进行后续的数据提取操作。

  1. 反爬策略应对:若遇到IP封禁、验证码等反爬策略。对于IP封禁,可采用IP代理池的方式,在每次请求时随机选择一个代理IP;对于验证码,简单的数字或字母验证码可尝试使用pytesseract库结合PIL进行识别,复杂验证码可能需要借助第三方打码平台。

完整举例代码

importrequestsimportreimporthtmlimportjsonfromseleniumimportwebdriverfromselenium.webdriver.common.byimportByfromselenium.webdriver.support.uiimportWebDriverWaitfromselenium.webdriver.supportimportexpected_conditionsasECdefclean_data(data_list):cleaned_data=[]fordataindata_list:clean_data=re.sub(r'<.*?>','',data)clean_data=html.unescape(clean_data)clean_data=re.sub(r'[\r\n\t\s]','',clean_data)cleaned_data.append(clean_data)returncleaned_datadefcrawl_product_comments(product_url):try:# 尝试使用requests获取页面headers={'User - Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'}response=requests.get(product_url,headers=headers)ifresponse.status_code==200:html_content=response.textelse:print(f'请求失败,状态码:{response.status_code}')return# 提取评价内容comment_pattern=re.compile(r'<div class="comment - content">(.*?)</div>',re.S)comments=re.findall(comment_pattern,html_content)# 提取评分score_pattern=re.compile(r'<span class="score">(.*?)</span>',re.S)scores=re.findall(score_pattern,html_content)# 提取用户信息user_pattern=re.compile(r'<a class="user - name">(.*?)</a>',re.S)users=re.findall(user_pattern,html_content)exceptExceptionase:print(f'使用requests获取数据失败,尝试使用Selenium:{e}')try:driver=webdriver.Chrome()driver.get(product_url)try:element=WebDriverWait(driver,10).until(EC.presence_of_element_located((By.CLASS_NAME,'comment - content')))html_content=driver.page_source comment_pattern=re.compile(r'<div class="comment - content">(.*?)</div>',re.S)comments=re.findall(comment_pattern,html_content)score_pattern=re.compile(r'<span class="score">(.*?)</span>',re.S)scores=re.findall(score_pattern,html_content)user_pattern=re.compile(r'<a class="user - name">(.*?)</a>',re.S)users=re.findall(user_pattern,html_content)finally:driver.quit()exceptExceptionase:print(f'使用Selenium获取数据也失败:{e}')returncomments=clean_data(comments)scores=clean_data(scores)users=clean_data(users)data=[]foriinrange(len(comments)):comment_info={'用户':users[i],'评分':scores[i],'评价内容':comments[i]}data.append(comment_info)withopen('product_comments.json','w',encoding='utf - 8')asf:json.dump(data,f,ensure_ascii=False,indent=4)if__name__=='__main__':product_url='https://example.com/product/12345'# 替换为实际产品链接crawl_product_comments(product_url)

通过以上详细的步骤和完整的代码示例,希望你能够顺利实现电商评价的爬取,并在实际应用中根据不同电商平台的特点灵活调整代码,有效应对各种反爬策略和页面结构变化,挖掘出有价值的电商评价数据。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/3 16:45:56

轻量化视觉大模型实战:TinyMind(90M)从训练到端侧部署的完整教程

为实现手机端高效多模态推理&#xff0c;作者探索了超轻量视觉语言模型TinyMind的构建。通过整合TinyCLIP视觉编码器与MiniMind语言模型&#xff0c;并以SmolVLM为指导优化架构&#xff0c;最终实现89M参数模型。文章完整分享了训练策略、改进尝试与工程化部署路径&#xff0c;…

作者头像 李华
网站建设 2026/6/1 1:08:01

【驱动量化交易10】教你如何通过股票数据api接口获取股票公司简介数据之Python、Java等多种主流语言实例代码演示通过股票数据接口获取数据

​ 如今&#xff0c;量化分析在股市领域风靡一时&#xff0c;其核心要素在于数据&#xff0c;获取股票数据&#xff0c;是踏上量化分析之路的第一步。你可以选择亲手编写爬虫来抓取&#xff0c;但更便捷的方式&#xff0c;莫过于利用专业的股票数据API接口。自编爬虫虽零成本&a…

作者头像 李华
网站建设 2026/6/1 22:40:24

从本地到云端:用Docker+CPolar把MyIP变成你的网络瑞士军刀!

文章目录前言1.关于MyIP2.Docker部署3.MyIP简单使用4.安装cpolar内网穿透5. 配置公网地址6. 配置固定公网地址总结MyIP 的多功能网络监测能力与 cpolar 的远程访问功能相结合&#xff0c;为个人和企业提供了低成本的网络管理方案。不用花钱买商业服务&#xff0c;也能轻松实现异…

作者头像 李华
网站建设 2026/6/2 22:30:50

内部服务错误500

在处理Web开发或API调用时&#xff0c;遇到“内部服务错误500”通常意味着服务器遇到了一个意外情况&#xff0c;阻止了它完成对请求的处理。错误消息“no content on Object due to end of input”通常与JSON解析或数据处理有关。 原因分析‌JSON解析错误‌&#xff1a;当服务…

作者头像 李华
网站建设 2026/6/3 8:29:31

OpenSpec标准下TensorRT的安全性与稳定性验证

OpenSpec标准下TensorRT的安全性与稳定性验证 在自动驾驶、智慧医疗和金融风控等关键场景中&#xff0c;AI推理系统早已不再只是“跑得快”就够用。一旦模型输出因异常输入、内存越界或硬件争抢而出现偏差&#xff0c;后果可能是灾难性的。因此&#xff0c;现代AI部署的核心命题…

作者头像 李华
网站建设 2026/6/3 15:37:52

全球车与本土车汽车紧固件标准体系的对比与挑战

在全球汽车产业持续向新能源、智能化和平台化演进的背景下&#xff0c;汽车紧固件这一基础零部件正逐步显现其在整车制造体系中的关键价值。围绕整车安全性、可靠性与批量一致性的核心要求&#xff0c;紧固件标准体系成为衡量不同汽车制造体系成熟度的重要维度。历经十五届持续…

作者头像 李华