news 2026/3/19 18:42:52

第三章——爬虫工具场景之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/3/10 0:12:20

吴恩达和OpenAI联合推出《LLM入门手册》超全PDF!看完普通人也能手搓AI

LLM 正在逐步改变人们的生活&#xff0c;而对于开发者&#xff0c;如何基于 LLM 提供的 API 快速、便捷地开发一些具备更强能力、集成LLM 的应用&#xff0c;来便捷地实现一些更新颖、更实用的能力&#xff0c;是一个急需学习的重要能力。 由吴恩达老师与 OpenAI 合作推出的《L…

作者头像 李华
网站建设 2026/3/16 10:41:42

传统算法vs大模型应用开发,零基础如何选择高薪赛道?

文章介绍了AI工程师的两大方向&#xff1a;传统算法工程师负责从0到1研发算法模型&#xff0c;追求性能极致&#xff1b;AI大模型应用开发工程师则专注于将现成大模型应用于业务场景&#xff0c;注重落地适配。两者区别在于"造"与"用"。对于零基础转行者&a…

作者头像 李华
网站建设 2026/3/10 21:08:15

Qwen3-VL-30B多模态输入与32k上下文详解

Qwen3-VL-30B&#xff1a;当AI真正“看见”并“记住”世界 在一场设备故障排查的深夜值班中&#xff0c;工程师小李面对控制面板上闪烁的红灯束手无策。他拍下三张照片——报警界面、铭牌型号、维修手册流程图——然后对着手机轻声问&#xff1a;“根据这些信息&#xff0c;下一…

作者头像 李华
网站建设 2026/3/12 21:34:10

获官方推荐的 Chrome 扩展暗中窃取数百万用户 AI 聊天记录

一款获得 Google Chrome "精选"徽章、拥有六百万用户的扩展程序被发现正在静默收集用户向各类 AI 聊天机器人输入的所有提示词&#xff0c;包括 OpenAI ChatGPT、Anthropic Claude、Microsoft Copilot、DeepSeek、Google Gemini、xAI Grok、Meta AI 和 Perplexity。 …

作者头像 李华
网站建设 2026/3/13 22:48:07

数据灾难:Claude AI执行rm -rf ~/命令清空开发者Mac主目录

越来越多的开发者开始使用AI辅助工具来简化工作流程。但随着采用率的提高&#xff0c;由这些工具引发的灾难性故障报告也在增加。在早前的一起事件中&#xff0c;某开发者使用Google Antigravity清理缓存&#xff0c;结果整个D盘被清空。AI事后道歉称这是其操作错误所致——尽管…

作者头像 李华