wordpress 插件站,可以发描文本的网站,建设部科技中心网站,wordpress怎么登陆地址猫头虎AI开源分享#xff1a;如何批量获取稀土掘金社区文章阅读量暨文章阅读量数据批量提取解决方案
在数据分析和内容创作的过程中#xff0c;获取文章的阅读量数据对于衡量文章的受欢迎程度、分析内容趋势具有重要意义。特别是对于像稀土掘金这样的大型技术社区平台#…猫头虎AI开源分享如何批量获取稀土掘金社区文章阅读量暨文章阅读量数据批量提取解决方案在数据分析和内容创作的过程中获取文章的阅读量数据对于衡量文章的受欢迎程度、分析内容趋势具有重要意义。特别是对于像稀土掘金这样的大型技术社区平台手动提取每篇文章的阅读量显得既繁琐又低效。因此我们可以通过编写一个简单的 Python 工具批量提取这些数据自动化完成这一任务。本文将为大家介绍如何用 Python 编写一个工具来从稀土掘金社区批量提取文章的阅读量数据。本文的重点是使用requests获取网页数据使用BeautifulSoup解析 HTML 内容并利用openpyxl操作 Excel 文件最后通过代理池和异常重试机制保证程序的稳定性和高效性。文章目录猫头虎AI开源分享如何批量获取稀土掘金社区文章阅读量暨文章阅读量数据批量提取解决方案环境准备安装必要的依赖库基础版代码结果问题及解决方案引入动态网络 IP 代理出现新问题部分数据无法获取加入异常重试机制总结环境准备在开始之前你需要准备好以下环境和工具Python 环境确保你的计算机上已安装 Python。Excel 表格用于存储稀土掘金文章的链接并写入对应的阅读量数据。安装必要的依赖库在开始编写代码之前我们需要安装一些 Python 库pipinstallrequests beautifulsoup4 openpyxlrequests用于发送 HTTP 请求获取网页数据。beautifulsoup4用于解析 HTML 页面。openpyxl用于操作 Excel 文件将结果写入表格。基础版代码我们从一个简单的基础版开始这个版本能够读取一个 Excel 文件提取其中的 URL获取每篇文章的阅读量并写回到表格中。# -*- coding: utf-8 -*-importtimeimportrequestsfrombs4importBeautifulSoupfromopenpyxlimportload_workbook# 配置区域 # Excel 文件名就在当前目录下INPUT_FILEjuejin-1.xlsx# 输出文件名OUTPUT_FILEjuejin-1_带阅读量.xlsx# 从第几行开始读取如果第1行是表头就从2开始START_ROW2# 第一列是链接第二列写入阅读量URL_COL1VIEWS_COL2# 每次请求间隔秒防止请求过快SLEEP_SECONDS1# 核心程序 defget_views_from_url(url:str)-str: 给定网址返回页面中 span classviews-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)}resprequests.get(url,headersheaders,timeout10)resp.raise_for_status()soupBeautifulSoup(resp.text,html.parser)# 根据你给的代码片段# span classviews-count>soup.select_one(span.views-count)ifnotspan:returntextspan.get_text(stripTrue)returntextdefmain():wbload_workbook(INPUT_FILE)# 默认使用当前活动工作表如需指定可以改成 wb[Sheet1]wswb.active max_rowws.max_rowprint(f共检测到{max_row}行数据开始处理……)forrowinrange(START_ROW,max_row1):urlws.cell(rowrow,columnURL_COL).valueifnoturl:continue# 跳过空行print(f第{row}行正在处理{url})try:viewsget_views_from_url(url)ifviews:print(f 未找到阅读量写入空值。)else:print(f 获取到阅读量{views})exceptExceptionase:print(f 发生错误{e})views# 出错就写空避免中断整个程序ws.cell(rowrow,columnVIEWS_COL,valueviews)# 稍作停顿避免对服务器压力过大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# 自定义更换}resprequests.get(url,headersheaders,proxiesPROXY,timeout10)resp.raise_for_status()出现新问题部分数据无法获取即使使用了代理可能还是会遇到部分请求失败或者读取到的数据为空的情况。这时我们可以在程序中加入异常重试机制确保请求失败时可以自动重试增加数据抓取的成功率。加入异常重试机制通过引入异常重试机制我们可以使得程序在面对请求失败、页面没有数据或者返回为 0 的情况时自动重试直到获取有效的阅读量数据为止。# -*- coding: utf-8 -*-importrandomimporttimeimportrequestsfrombs4importBeautifulSoupfromopenpyxlimportload_workbook# 配置区域 # Excel 文件名就在当前目录下INPUT_FILEjuejin-1.xlsx# 输出文件名OUTPUT_FILEjuejin-1_带阅读量.xlsx# 从第几行开始读取如果第1行是表头就从2开始START_ROW2# 第一列是链接第二列写入阅读量URL_COL1VIEWS_COL2# 每次请求间隔秒防止请求过快BASE_SLEEP1.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 次 → 54return.join(chforchintextifch.isdigit())# # 核心抓取函数失败/为0都会重试# deffetch_view_count(url:str,retry:int1)-str: - 请求失败 → 重试 - 标签不存在 → 重试 - 找到但数字为空 → 重试 - 数字为 0 → 也当成失败重试 - 全失败 → 返回空 attempt0whileattemptretry:ifattempt0:print(f ↻ 重试第{attempt}次...)time.sleep(BASE_SLEEPrandom.uniform(*RANDOM_SLEEP))try:resprequests.get(url,headersHEADERS,proxiesPROXY,timeout15)resp.raise_for_status()soupBeautifulSoup(resp.text,html.parser)spansoup.select_one(span.views-count)ifnotspan:print( 未找到 span.views-count 元素)else:rawspan.get_text(stripTrue)digitsextract_digits(raw)ifnotdigits:print(f 找到元素但无数字{raw!r})elifdigits0:print( 获取到 0视为失败将继续重试…)else:returndigitsexceptExceptionase:print(f 请求失败{e})attempt1return# # 主程序逐条写入 Excel# defmain():wbload_workbook(INPUT_FILE)wswb.active max_rowws.max_rowprint(f共{max_row}行数据从第{START_ROW}行开始处理。\n)forrowinrange(START_ROW,max_row1):urlws.cell(rowrow,columnURL_COL).valueifnoturl:continueprint(f第{row}行正在处理{url})# 获取阅读量viewsfetch_view_count(url,retry1)ifviews:print(f ✓ 获取到阅读量{views})else:print( × 未能获取到有效阅读量写入空)# ⭐ 立即写入本行数据ws.cell(rowrow,columnVIEWS_COL,valueviews)# ⭐ 每条数据获取后立即保存文件wb.save(OUTPUT_FILE)print( → 已立即写入 Excel 并保存。\n)print(f全部完成结果已保存到{OUTPUT_FILE})if__name____main__:main()总结通过引入代理池和异常重试机制我们能够确保即使在高频率请求下程序依然能稳定运行准确地获取到稀土掘金文章的阅读量数据。如果你遇到任何问题或者想进一步改进该工具欢迎随时与我交流此外使用 1000个稳定IP 可以帮助你轻松解决代理问题提高爬虫程序的稳定性。