news 2026/6/23 20:45:33

猫头虎AI开源分享:如何批量获取稀土掘金社区文章阅读量暨文章阅读量数据批量提取解决方案

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
猫头虎AI开源分享:如何批量获取稀土掘金社区文章阅读量暨文章阅读量数据批量提取解决方案

猫头虎AI开源分享:如何批量获取稀土掘金社区文章阅读量暨文章阅读量数据批量提取解决方案

在数据分析和内容创作的过程中,获取文章的阅读量数据对于衡量文章的受欢迎程度、分析内容趋势具有重要意义。特别是对于像稀土掘金这样的大型技术社区平台,手动提取每篇文章的阅读量显得既繁琐又低效。因此,我们可以通过编写一个简单的 Python 工具,批量提取这些数据,自动化完成这一任务。

本文将为大家介绍如何用 Python 编写一个工具,来从稀土掘金社区批量提取文章的阅读量数据。本文的重点是使用requests获取网页数据,使用BeautifulSoup解析 HTML 内容,并利用openpyxl操作 Excel 文件,最后通过代理池和异常重试机制保证程序的稳定性和高效性。

文章目录

  • 猫头虎AI开源分享:如何批量获取稀土掘金社区文章阅读量暨文章阅读量数据批量提取解决方案
    • 环境准备
      • 安装必要的依赖库
    • 基础版代码
      • 结果问题及解决方案
      • 引入动态网络 IP 代理
      • 出现新问题:部分数据无法获取
    • 加入异常重试机制
    • 总结

环境准备

在开始之前,你需要准备好以下环境和工具:

  1. Python 环境:确保你的计算机上已安装 Python。
  2. Excel 表格:用于存储稀土掘金文章的链接,并写入对应的阅读量数据。

安装必要的依赖库

在开始编写代码之前,我们需要安装一些 Python 库:

pipinstallrequests beautifulsoup4 openpyxl
  • requests:用于发送 HTTP 请求获取网页数据。
  • beautifulsoup4:用于解析 HTML 页面。
  • openpyxl:用于操作 Excel 文件,将结果写入表格。

基础版代码

我们从一个简单的基础版开始,这个版本能够读取一个 Excel 文件,提取其中的 URL,获取每篇文章的阅读量并写回到表格中。

# -*- coding: utf-8 -*-importtimeimportrequestsfrombs4importBeautifulSoupfromopenpyxlimportload_workbook# ===== 配置区域 =====# Excel 文件名(就在当前目录下)INPUT_FILE="juejin-1.xlsx"# 输出文件名OUTPUT_FILE="juejin-1_带阅读量.xlsx"# 从第几行开始读取(如果第1行是表头,就从2开始)START_ROW=2# 第一列是链接,第二列写入阅读量URL_COL=1VIEWS_COL=2# 每次请求间隔(秒),防止请求过快SLEEP_SECONDS=1# ===== 核心程序 =====defget_views_from_url(url:str)->str:""" 给定网址,返回页面中 <span class="views-count"> 内的阅读量数字字符串。 如果未找到,则返回空字符串。 """headers={"User-Agent":("Mozilla/5.0 (Windows NT 10.0; Win64; x64) ""AppleWebKit/537.36 (KHTML, like Gecko) ""Chrome/129.0 Safari/537.36")}resp=requests.get(url,headers=headers,timeout=10)resp.raise_for_status()soup=BeautifulSoup(resp.text,"html.parser")# 根据你给的代码片段:# <span class="views-count">=soup.select_one("span.views-count")ifnotspan:return""text=span.get_text(strip=True)returntextdefmain():wb=load_workbook(INPUT_FILE)# 默认使用当前活动工作表,如需指定,可以改成 wb["Sheet1"]ws=wb.active max_row=ws.max_rowprint(f"共检测到{max_row}行数据,开始处理……")forrowinrange(START_ROW,max_row+1):url=ws.cell(row=row,column=URL_COL).valueifnoturl:continue# 跳过空行print(f"第{row}行,正在处理:{url}")try:views=get_views_from_url(url)ifviews=="":print(f" 未找到阅读量,写入空值。")else:print(f" 获取到阅读量:{views}")exceptExceptionase:print(f" 发生错误:{e}")views=""# 出错就写空,避免中断整个程序ws.cell(row=row,column=VIEWS_COL,value=views)# 稍作停顿,避免对服务器压力过大time.sleep(SLEEP_SECONDS)wb.save(OUTPUT_FILE)print(f"处理完成,结果已保存到:{OUTPUT_FILE}")if__name__=="__main__":main()

结果问题及解决方案

运行上述代码后,你可能会发现当请求数量增加时,程序会遇到一些问题,例如部分页面无法获取阅读量或返回 0 阅读量。这是因为网站会对频繁的请求做出限制,防止被当作爬虫攻击。为了解决这个问题,我们需要使用动态网络 IP(代理)来避免请求被封禁。

引入动态网络 IP 代理

为了防止频繁请求导致 IP 被封禁,我们可以使用一个代理池。这里推荐使用 1000个稳定IP,来提供稳定的代理。

# 代理设置PROXY={"http":"http://ip.cc","https":"http://ip.cc"# 自定义更换}resp=requests.get(url,headers=headers,proxies=PROXY,timeout=10)resp.raise_for_status()

出现新问题:部分数据无法获取

即使使用了代理,可能还是会遇到部分请求失败或者读取到的数据为空的情况。这时我们可以在程序中加入异常重试机制,确保请求失败时可以自动重试,增加数据抓取的成功率。

加入异常重试机制

通过引入异常重试机制,我们可以使得程序在面对请求失败、页面没有数据或者返回为 0 的情况时自动重试,直到获取有效的阅读量数据为止。

# -*- coding: utf-8 -*-importrandomimporttimeimportrequestsfrombs4importBeautifulSoupfromopenpyxlimportload_workbook# ===== 配置区域 =====# Excel 文件名(就在当前目录下)INPUT_FILE="juejin-1.xlsx"# 输出文件名OUTPUT_FILE="juejin-1_带阅读量.xlsx"# 从第几行开始读取(如果第1行是表头,就从2开始)START_ROW=2# 第一列是链接,第二列写入阅读量URL_COL=1VIEWS_COL=2# 每次请求间隔(秒),防止请求过快BASE_SLEEP=1.2# 额外随机等待(秒)RANDOM_SLEEP=(0.5,1.5)# 代理设置PROXY={"http":"http://ip.cc","https":"http://ip.cc"}# ===== 核心程序 =====HEADERS={"User-Agent":("Mozilla/5.0 (Windows NT 10.0; Win64; x64) ""AppleWebKit/537.36 (KHTML, like Gecko) ""Chrome/129.0 Safari/537.36")}# ===================# 核心抓取函数,带重试# ===================defextract_digits(text:str)->str:"""提取纯数字,例如 '阅读 54 次' → '54'"""return"".join(chforchintextifch.isdigit())# ===================# 核心抓取函数(失败/为0都会重试)# ===================deffetch_view_count(url:str,retry:int=1)->str:""" - 请求失败 → 重试 - 标签不存在 → 重试 - 找到但数字为空 → 重试 - 数字为 '0' → 也当成失败重试 - 全失败 → 返回空 """attempt=0whileattempt<=retry:ifattempt>0:print(f" ↻ 重试第{attempt}次...")time.sleep(BASE_SLEEP+random.uniform(*RANDOM_SLEEP))try:resp=requests.get(url,headers=HEADERS,proxies=PROXY,timeout=15)resp.raise_for_status()soup=BeautifulSoup(resp.text,"html.parser")span=soup.select_one("span.views-count")ifnotspan:print(" 未找到 span.views-count 元素")else:raw=span.get_text(strip=True)digits=extract_digits(raw)ifnotdigits:print(f" 找到元素但无数字:{raw!r}")elifdigits=="0":print(" 获取到 0,视为失败,将继续重试…")else:returndigitsexceptExceptionase:print(f" 请求失败:{e}")attempt+=1return""# ===================# 主程序(逐条写入 Excel)# ===================defmain():wb=load_workbook(INPUT_FILE)ws=wb.active max_row=ws.max_rowprint(f"共{max_row}行数据,从第{START_ROW}行开始处理。\n")forrowinrange(START_ROW,max_row+1):url=ws.cell(row=row,column=URL_COL).valueifnoturl:continueprint(f"第{row}行,正在处理:{url}")# 获取阅读量views=fetch_view_count(url,retry=1)ifviews:print(f" ✓ 获取到阅读量:{views}")else:print(" × 未能获取到有效阅读量(写入空)")# ⭐ 立即写入本行数据ws.cell(row=row,column=VIEWS_COL,value=views)# ⭐ 每条数据获取后立即保存文件wb.save(OUTPUT_FILE)print(" → 已立即写入 Excel 并保存。\n")print(f"全部完成,结果已保存到:{OUTPUT_FILE}")if__name__=="__main__":main()

总结

通过引入代理池和异常重试机制,我们能够确保即使在高频率请求下,程序依然能稳定运行,准确地获取到稀土掘金文章的阅读量数据。如果你遇到任何问题,或者想进一步改进该工具,欢迎随时与我交流!

此外,使用 1000个稳定IP 可以帮助你轻松解决代理问题,提高爬虫程序的稳定性。

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

亲测!WordPress网站接入聚合登录实践

亲测&#xff01;WordPress网站接入聚合登录实践行业痛点分析在当前的聚合登录领域&#xff0c;存在着诸多技术挑战。一方面&#xff0c;不同平台的登录协议和接口标准差异较大&#xff0c;开发者需要花费大量时间和精力去适配多种协议&#xff0c;这不仅增加了开发成本&#x…

作者头像 李华
网站建设 2026/6/23 14:24:55

15、Mozilla模板系统:功能、构建与应用实践

Mozilla模板系统:功能、构建与应用实践 1. 模板系统概述 Mozilla的模板系统是XUL标签的一个子集,借助普通XUL标签、XUL模板标签和RDF标签的组合,可使用RDF数据流为XUL文档指定内容。该系统能创建内容不固定的文档,适用于显示随时间变化的数据,为依赖外部信息的应用提供基…

作者头像 李华
网站建设 2026/6/23 14:27:23

Ofd2Pdf完整使用教程:5分钟掌握OFD转PDF的终极技巧

Ofd2Pdf是一款专业的文档格式转换工具&#xff0c;能够将OFD文件高效转换为PDF格式&#xff0c;保持原始文档的排版和内容完整性。无论你是需要处理各类文件、商务文档还是个人资料&#xff0c;这款免费开源工具都能帮你轻松完成格式转换任务。&#x1f3af; 【免费下载链接】O…

作者头像 李华
网站建设 2026/6/23 20:05:34

毕业论文操作全流程:以营销类选题为例

作为一名本科 / 硕士毕业生&#xff0c;毕业论文的完成过程更像是一场 “自主主导的学术实践”—— 从选题的迷茫、调研的奔波&#xff0c;到数据分析的纠结、初稿的打磨&#xff0c;每个环节都需要学生主动规划、解决问题。本文将以 “互联网背景下小微企业营销策略创新研究”…

作者头像 李华
网站建设 2026/6/23 6:00:22

20、Mozilla 开发中的脚本、数据结构与数据库支持

Mozilla 开发中的脚本、数据结构与数据库支持 1. 命令行参数处理 在某些情况下,需要猜测所提供的参数,可使用 getCmdLineValue() 方法。以下是一个典型调用示例: var url = cls.getCmdLineValue("-chrome");如果在调用时未传入该参数,此方法将返回 null …

作者头像 李华