SEO教程:快速抓取网站TDK的API技巧

在搜索引擎算法频繁更迭、内容生态日趋复杂的今天,SEO从业者的工具箱必须持续升级。传统手动检查网站标题(Title)、描述(Description)和关键词(Keywords)——即所谓TDK——的方式,在面对海量页面分析与竞品调研时,已显得力不从心。因此,能够快速、批量抓取网站TDK的API技术,已从一个效率技巧演变为一项核心竞争优势。然而,结合近期谷歌算法更新、第三方数据接口变迁以及AI生成内容的泛滥,这项技巧的价值与应用场景正在发生深刻变化。本文旨在穿透表面技术操作,剖析其背后的行业逻辑,并提供前瞻性视角。


一、 效率之外的战略价值:TDK抓取API的深层解读

多数教程将快速抓取TDK的API技巧仅仅定位为“效率工具”,这极大低估了其战略意义。在2023年谷歌“有用内容更新”及后续“核心更新”的背景下,搜索引擎对页面意图、主题权威性及用户体验的评估更为多维。TDK作为页面最凝练的元数据摘要,其集体呈现(如一个站群、一个垂直领域的所有竞品)已成为关键的竞争情报数据源。

通过API批量抓取,SEO专家能进行的不仅是简单的标签检查:其一,可宏观分析某一细分赛道所有玩家的内容焦点迁移,洞悉行业关键词策略的集体转向。其二,结合抓取时间戳数据,可监测竞争对手对重大算法更新或热点事件的响应速度与策略调整,实现动态对标。其三,在AI生成内容大量充斥网站、导致TDK模板化趋同的当下,API抓取能迅速识别出那些仍保持高度独特性与精准性的页面,从而为高质量内容创作提供参照基线。因此,API抓取已从“执行层”工具,转变为“分析层”甚至“决策层”的战略雷达。


二、 技术实现路径的进化与当前最佳实践

早期基于简单curl或Python requests库发送请求,再以正则表达式匹配、<meta name="description">标签的方式,在当今Web环境下已频频失效。现代网站广泛采用JavaScript渲染、反爬虫机制及动态加载,单纯解析HTML源码常常一无所获。</p> <p class=article>当前前沿实践已转向结合无头浏览器(如Playwright、Puppeteer)与云服务API的混合架构。例如,先通过Playwright模拟访问确保页面完整渲染,再提取TDK元素;同时,为应对大规模抓取需求,可集成类似Bright Data、ScraperAPI等专业解决方案,它们能自动处理JS渲染、代理轮换和CAPTCHA破解。一个关键的进阶技巧是:在抓取TDK时,同步捕获<h1>标签及页面首段文字,与TDK进行对比分析。这种“TDK+”数据模型能更精准地评估页面内容的相关性与关键词堆砌风险,这是单纯看TDK所无法实现的洞察。</p> <p class=article>近期,随着OpenAI的GPT系列等大型语言模型接口的开放,出现了更智能的解析方式:将抓取到的页面片段(包括TDK)送入LLM进行意图概括与分类,这使SEO分析从“关键词匹配”进入“语义场分析”的新阶段。但这亦带来成本与合规性新挑战。</p> <hr> <p class=article>三、 行业新变量下的风险与伦理考量</p> <p class=article>在畅谈技术便利时,必须正视随之而来的风险与灰色地带。首先,法律风险加剧。欧盟的《数字市场法案》、中国的《数据安全法》等法规对数据抓取行为施加了更严格限制。无差别、高频率的API抓取可能触犯“计算机欺诈与滥用法案”(如美国CFAA)相关条款,或侵犯网站的服务条款。近期多家知名数据分析公司因爬虫数据业务面临诉讼,即为警示。</p> <p class=article>其次,数据质量陷阱。在搜索引擎结果页面(SERP)日益个性化、本地化的今天,不同用户、不同地理位置看到的TDK可能经由A/B测试或动态生成而不同。API抓取单次请求得到的结果,可能无法代表页面的普遍曝光形态,导致分析偏差。此外,谷歌搜索页面本身TDK的“截断”与“改写”现象(尤其描述部分),使得抓取到的原始TDK与最终在SERP中展示的版本存在差异,分析时需考虑此“谷歌滤镜”效应。</p> <p class=article>前瞻性地看,未来的TDK抓取可能必须在“许可式”框架下进行。网站通过结构化数据(如JSON-LD)或专门的开发者API(类似Twitter API旧版)主动提供标准化元数据,供合规抓取与分析。SEO行业可能需要推动建立一种轻量的、标准化的元数据访问协议,以平衡数据获取需求与网站主权、用户隐私。</p> <hr> <p class=article>四、 前瞻视角:当TDK本身变得“流动”与“智能”</p> <p class=article>最大的变革或许来自TDK属性本身的演化。传统静态TDK正被动态智能TDK所挑战。谷歌已多次表示,其生成搜索结果标题与描述时,会综合考量页面内容、用户查询上下文,而非完全采用页面自带的TDK。这意味着,未来SEO从业者通过API抓取的“站点TDK”,可能与搜索引擎实际采用的“SERP TDK”差异巨大。</p> <p class=article>因此,最前沿的思考是:API抓取的对象需要扩展。除了抓取站点TDK,更应抓取搜索引擎实际展示的SERP TDK(这涉及对搜索结果的爬取,合规门槛更高),并进行差异对比。这种差异数据将成为优化页面以“迎合”或“引导”搜索引擎标题生成逻辑的黄金指标。更进一步,在搜索引擎生成式AI(如SGE)逐步铺开的情境下,页面的TDK甚至可能不再是SEO优化的绝对核心,如何确保页面核心实体与主张能被AI准确提炼并引用,将成为新焦点。届时,API抓取技巧或许将升级为“页面核心主张与SGE摘要对比分析API”。</p> <hr> <p class=article>问答穿插:专业读者常见疑虑解析</p> <p class=article><strong>问:对于中小型网站,自建复杂TDK抓取API系统是否性价比过低?有何替代方案?</strong></p> <p class=article>答:的确,自建并维护一套能应对反爬的稳健系统成本高昂。建议采用阶梯策略:初期可使用浏览器插件(如SEO Meta in 1 Click)进行小规模抽样检查。当需要批量处理时,可考虑使用Zapier/Make等自动化平台连接简易爬虫服务(如ParseHub),或直接采购Ahrefs、Semrush等成熟SEO工具的API接口,它们已集成可靠的TDK抓取功能,数据更稳定。将专业事务外包给专业工具,是性价比更高的选择。</p> <p class=article><strong>问:API抓取的TDK数据,如何与SEO工作流其他部分(如关键词排名、流量分析)有效结合?</strong></p> <p class=article>答:关键在于数据关联与仪表板建设。将抓取的TDK数据(关键词列表、标题/描述长度、唯一性标记)与Google Search Console的排名关键词数据、网站分析工具的流量数据进行时间序列上的关联。例如,可以发现“当标题长度在特定区间且包含特定情感词时,页面对于长尾关键词的排名稳定性更高”。这需要将API抓取数据存入数据库,并通过BI工具(如Looker Studio)与其他数据源联结,形成动态监控仪表板。</p> <p class=article><strong>问:面对AI批量生成的、TDK高度优化的页面,我们基于竞品TDK的分析是否还有意义?</strong></p> <p class=article>答:这是一个尖锐而重要的问题。当竞品页面由AI大规模生成时,其TDK可能呈现“高度优化但内容空洞”的特征。此时,单纯分析TDK关键词密度和结构会失效。分析重点应转向:1)对比AI生成页面与仍然由人工撰写的高价值页面的TDK在“情感倾向”、“具体性”和“价值主张明确度”上的差异;2)监测这些AI页面在搜索排名中的波动性,验证谷歌算法是否已能识别并抑制此类内容。TDK分析的意义从“模仿”转向“甄别”与“预警”。</p> <hr> <p class=article>结语</p> <p class=article>抓取网站TDK的API技巧,绝非一个一成不变的技术快照。它是一面镜子,反射着搜索引擎、网站技术、内容生产与数据伦理之间的复杂博弈。从提升手工效率的起点,它已发展为竞争情报的核心,并将在未来直面动态SERP、生成式AI与全球数据治理的深刻塑造。对于专业SEO从业者而言,掌握这项技巧的底层逻辑与演进趋势,比编写一段完美的抓取脚本更为重要。未来的SEO战场,将是数据获取能力、合规判断力与智能分析能力的三维融合,而TDK API抓取,正是这个融合战场上一个不可或缺的观测哨。</p> </div> <div class="article-actions"> <button class="action-btn like-btn" onclick="likeArticle(19549)"> <i class="fa fa-heart"></i> <span class="like-text">点赞</span> <span class="like-count">0</span> </button> <button class="action-btn share-btn" onclick="openShareModal()"> <i class="fa fa-share-alt"></i> 分享文章 </button> </div> </article> <nav class="article-navigation fade-in" style="animation-delay: 0.2s;"> <div class="nav-item"> <a href="http://999tour.cn/g168z1/9j-19548.html"> <div class="nav-label"><i class="fa fa-chevron-left"></i> 上一篇</div> <div class="nav-title">TDK抓取API - SEO优化必备工具</div> </a> </div> <div class="nav-item"> <a href="http://999tour.cn/g168z1/9j-20079.html"> <div class="nav-label">下一篇 <i class="fa fa-chevron-right"></i></div> <div class="nav-title">微信视频号美食攻略:家常菜教程与探店视频精选(共23字,含标点,40字以内)</div> </a> </div> </nav> <section class="related-articles fade-in" style="animation-delay: 0.4s;"> <h3 class="related-title"> <i class="fa fa-list"></i> 相关文章 </h3> <ul class="related-list"> <li class="related-item"> <a href="http://999tour.cn/g168z1/9j-19550.html"> 魔速TDK:秒级SEO优化神器,让你的网站登顶搜索引擎! </a> <div class="related-meta"> <span><i class="fa fa-calendar"></i> 2026-10-08</span> <span><i class="fa fa-eye"></i> 9 次浏览</span> </div> </li> <li class="related-item"> <a href="http://999tour.cn/g168z1/9j-19551.html"> 百度收录查询API:年度SEO成效洞察助手 </a> <div class="related-meta"> <span><i class="fa fa-calendar"></i> 2026-10-08</span> <span><i class="fa fa-eye"></i> 9 次浏览</span> </div> </li> <li class="related-item"> <a href="http://999tour.cn/g168z1/9j-19552.html"> 百度收录查询API:实时域名收录SEO检测 </a> <div class="related-meta"> <span><i class="fa fa-calendar"></i> 2026-10-08</span> <span><i class="fa fa-eye"></i> 23 次浏览</span> </div> </li> <li class="related-item"> <a href="http://999tour.cn/g168z1/9j-19553.html"> 百度收录查询API上线,实时监测SEO效果 </a> <div class="related-meta"> <span><i class="fa fa-calendar"></i> 2026-10-08</span> <span><i class="fa fa-eye"></i> 35 次浏览</span> </div> </li> <li class="related-item"> <a href="http://999tour.cn/g168z1/9j-19554.html"> 百度收录API - 实时查询SEO效果 </a> <div class="related-meta"> <span><i class="fa fa-calendar"></i> 2026-10-08</span> <span><i class="fa fa-eye"></i> 9 次浏览</span> </div> </li> </ul> </section> </div> <div class="share-modal" id="shareModal"> <div class="share-modal-overlay" onclick="closeShareModal()"></div> <div class="share-modal-content"> <div class="share-modal-header"> <h3><i class="fa fa-share-alt"></i> 分享文章</h3> <button class="close-btn" onclick="closeShareModal()"> <i class="fa fa-times"></i> </button> </div> <div class="share-modal-body"> <div class="share-options"> <div class="share-option" onclick="shareToWeibo()"> <div class="share-icon weibo"> <i class="fa fa-weibo"></i> </div> <span>微博</span> </div> <div class="share-option" onclick="shareToQQ()"> <div class="share-icon qq"> <i class="fa fa-qq"></i> </div> <span>QQ</span> </div> <div class="share-option" onclick="shareToQzone()"> <div class="share-icon qzone"> <i class="fa fa-star"></i> </div> <span>QQ空间</span> </div> <div class="share-option" onclick="copyLink()"> <div class="share-icon copy"> <i class="fa fa-link"></i> </div> <span>复制链接</span> </div> </div> <div class="share-link-box"> <label>文章链接:</label> <div class="link-input-group"> <input type="text" id="articleLink" value="http://999tour.cn/g168z1/9j-19549.html" readonly> <button onclick="copyLinkFromInput()"> <i class="fa fa-copy"></i> 复制 </button> </div> </div> </div> </div> </div> <div class="share-toast" id="shareToast">操作成功</div> <script> function likeArticle(articleId) { const likeBtn = document.querySelector('.like-btn'); const likeCount = document.querySelector('.like-count'); const likeText = document.querySelector('.like-text'); if (localStorage.getItem('liked_' + articleId)) { showToast('您已经点过赞了'); return; } likeBtn.classList.add('animate'); setTimeout(() => likeBtn.classList.remove('animate'), 300); $.post('http://999tour.cn/ajax.php?act=dianzan', { type:2, id:'19549', }, function(data) { if (data.code ==200) { likeBtn.classList.add('liked'); likeText.textContent = '已赞'; likeCount.textContent = parseInt(likeCount.textContent) + 1; localStorage.setItem('liked_' + articleId, '1'); showToast('点赞成功'); } else { showToast(data.msg || '点赞失败'); } }, 'json').fail(function() { showToast('网络错误,请重试'); }); } function openShareModal() { document.getElementById('shareModal').classList.add('show'); document.body.style.overflow = 'hidden'; } function closeShareModal() { document.getElementById('shareModal').classList.remove('show'); document.body.style.overflow = ''; } function shareToWeibo() { const title = encodeURIComponent(document.title); const url = encodeURIComponent(window.location.href); window.open(`https://service.weibo.com/share/share.php?title=${title}&url=${url}`, '_blank', 'width=600,height=400'); closeShareModal(); } function shareToQQ() { const title = encodeURIComponent(document.title); const url = encodeURIComponent(window.location.href); const desc = encodeURIComponent('分享一篇精彩文章'); const summary = encodeURIComponent('来自本站的优质内容'); const shareUrl = `https://connect.qq.com/widget/shareqq/index.html?url=${url}&title=${title}&desc=${desc}&summary=${summary}`; window.open(shareUrl, '_blank', 'width=600,height=400'); closeShareModal(); } function shareToQzone() { const title = encodeURIComponent(document.title); const url = encodeURIComponent(window.location.href); const desc = encodeURIComponent('分享一篇精彩文章'); const shareUrl = `https://sns.qzone.qq.com/cgi-bin/qzshare/cgi_qzshare_onekey?url=${url}&title=${title}&desc=${desc}`; window.open(shareUrl, '_blank', 'width=600,height=400'); closeShareModal(); } function copyLink() { const url = window.location.href; copyToClipboard(url); closeShareModal(); } function copyLinkFromInput() { const input = document.getElementById('articleLink'); copyToClipboard(input.value); } function copyToClipboard(text) { if (navigator.clipboard && navigator.clipboard.writeText) { navigator.clipboard.writeText(text).then(function() { showToast('链接已复制到剪贴板'); }).catch(function() { fallbackCopyText(text); }); } else { fallbackCopyText(text); } } function fallbackCopyText(text) { const textArea = document.createElement('textarea'); textArea.value = text; textArea.style.position = 'fixed'; textArea.style.left = '-9999px'; document.body.appendChild(textArea); textArea.select(); try { document.execCommand('copy'); showToast('链接已复制到剪贴板'); } catch (err) { showToast('复制失败,请手动复制链接'); } document.body.removeChild(textArea); } function showToast(message) { const toast = document.getElementById('shareToast'); toast.textContent = message; toast.style.display = 'block'; setTimeout(() => { toast.style.display = 'none'; }, 2000); } document.addEventListener('keydown', function(e) { if (e.key === 'Escape') { closeShareModal(); } }); </script> <footer class="crystal-footer"> <div class="crystal-footer-bg"> <div class="crystal-footer-shapes"> <div class="crystal-footer-shape crystal-footer-shape-1"></div> <div class="crystal-footer-shape crystal-footer-shape-2"></div> <div class="crystal-footer-shape crystal-footer-shape-3"></div> </div> </div> <div class="crystal-friend-links-section"> <div class="crystal-friend-links-container"> <div class="crystal-friend-links-header"> <h3 class="crystal-friend-links-title"> <i class="layui-icon layui-icon-link"></i> 友情链接 </h3> <p class="crystal-friend-links-desc">这里收集了一些优质的网站资源,欢迎交流合作!</p> </div> <div class="crystal-friend-links-list"> 它页底部版权 </div> </div> </div> <div class="crystal-footer-container"> <div class="crystal-footer-content"> <div class="crystal-footer-section"> <h3 class="crystal-footer-title"> <i class="fa fa-star"></i> 流量倍增器 </h3> <p class="crystal-footer-desc"> 流量倍增器专注研究“搜索+推荐+同城+直播”多入口流量协同。设计流量动线,实现不同入口流量的相互引导与叠加放大,构建持续滚雪球式的增长飞轮,让推广效果呈指数级提升。 </p> <div class="crystal-footer-stats"> <div class="crystal-stat"> <span class="crystal-stat-number">20019</span> <span class="crystal-stat-label">篇文章</span> </div> <div class="crystal-stat"> <span class="crystal-stat-number">601600</span> <span class="crystal-stat-label">次阅读</span> </div> </div> </div> <div class="crystal-footer-section"> <h4 class="crystal-footer-subtitle"> <i class="fa fa-folder"></i> 文章分类 </h4> <ul class="crystal-footer-links"> <li> <a href="http://999tour.cn/?class=9" class="crystal-footer-link"> <i class="fa fa-angle-right"></i> API接口 </a> </li> <li> <a href="http://999tour.cn/?class=12" class="crystal-footer-link"> <i class="fa fa-angle-right"></i> 万能工具 </a> </li> <li> <a href="http://999tour.cn/?class=5" class="crystal-footer-link"> <i class="fa fa-angle-right"></i> 云服务器 </a> </li> <li> <a href="http://999tour.cn/?class=4" class="crystal-footer-link"> <i class="fa fa-angle-right"></i> 信息查询 </a> </li> <li> <a href="http://999tour.cn/?class=11" class="crystal-footer-link"> <i class="fa fa-angle-right"></i> 支付接口 </a> </li> <li> <a href="http://999tour.cn/?class=6" class="crystal-footer-link"> <i class="fa fa-angle-right"></i> 游戏资讯 </a> </li> </ul> </div> <div class="crystal-footer-section"> <h4 class="crystal-footer-subtitle"> <i class="fa fa-fire"></i> 热门文章 </h4> <ul class="crystal-footer-links"> <li> <a href="http://999tour.cn/g168z1/9j-180.html" class="crystal-footer-link"> <i class="fa fa-file-text-o"></i> 全网数据查找网站汇总:丰富资源一网打尽,... </a> </li> <li> <a href="http://999tour.cn/g168z1/9j-173.html" class="crystal-footer-link"> <i class="fa fa-file-text-o"></i> 如何避免陷入经营异常名录?企业必看全解析... </a> </li> <li> <a href="http://999tour.cn/g168z1/9j-209.html" class="crystal-footer-link"> <i class="fa fa-file-text-o"></i> 星座性格分析查询-星座网-星尘算命-星座... </a> </li> <li> <a href="http://999tour.cn/g168z1/9j-214.html" class="crystal-footer-link"> <i class="fa fa-file-text-o"></i> 免费抽签算命占卜,观音灵签在线抽签和月老... </a> </li> </ul> </div> <div class="crystal-footer-section"> <h4 class="crystal-footer-subtitle"> <i class="fa fa-link"></i> 快捷链接 </h4> <ul class="crystal-footer-links"> <li> <a href="http://999tour.cn/" class="crystal-footer-link"> <i class="fa fa-home"></i> 首页 </a> </li> <li> <a href="http://999tour.cn/" class="crystal-footer-link"> <i class="fa fa-list"></i> 文章列表 </a> </li> <li> <a href="#" class="crystal-footer-link" onclick="scrollToTop(); return false;"> <i class="fa fa-arrow-up"></i> 返回顶部 </a> </li> <li> <a href="tencent://message/?uin=2646906096" class="crystal-footer-link"> <i class="fa fa-qq"></i> 联系我们 </a> </li> </ul> </div> </div> <div class="crystal-footer-bottom"> <div class="crystal-footer-copyright"> <p class="crystal-footer-powered"><i class="fa fa-heart crystal-heart"></i><span class="crystal-highlight"></span> <span id="yiyan">过于在意,致反失意</span></p> <p>© 2026 流量倍增器. All rights reserved. | <a href="https://beian.miit.gov.cn/" target="_blank" rel="nofollow">京ICP备13017041号-1</a></p> </div> <div class="crystal-footer-social"> <a href="tencent://message/?uin=2646906096" class="crystal-social-link" title="QQ"> <i class="fa fa-qq"></i> </a> <a href="#" class="crystal-social-link" title="微博" onclick="return false;"> <i class="fa fa-weibo"></i> </a> <a href="#" class="crystal-social-link" title="GitHub" onclick="return false;"> <i class="fa fa-github"></i> </a> <a href="mailto:2646906096@qq.com" class="crystal-social-link" title="邮箱"> <i class="fa fa-envelope"></i> </a> </div> </div> </div> </footer> <div class="crystal-back-to-top" id="backToTop" onclick="scrollToTop()"> <i class="fa fa-arrow-up"></i> </div> <div class="crystal-progress-bar" id="progressBar"></div> <div id="starField" class="star-field"></div> <div id="particles" class="particles"></div> <script src="http://999tour.cn/assets/js/jquery/1.12.4/jquery.min.js"></script> <script> $(document).ready(function() { $.ajax({ type : "GET", url : "https://yuanxiapi.cn/api/?id=18&key=217_b50c69d781095acd7e1bba80a391a045", dataType : 'json', async: true, success : function(data) {data=data.data; $('#yiyan').html(data.text); }}); function createStarField() { const starField = $('#starField'); const starCount = 150; for (let i = 0; i < starCount; i++) { const star = $('<div class="star"></div>'); const size = Math.random() < 0.7 ? 1 : (Math.random() < 0.9 ? 2 : 3); const brightness = Math.random() < 0.3 ? 'bright' : (Math.random() < 0.6 ? 'medium' : 'dim'); star.addClass(`size-${size} ${brightness}`); star.css({ left: Math.random() * 100 + '%', top: Math.random() * 100 + '%', animationDelay: Math.random() * 4 + 's' }); star.data('initialLeft', parseFloat(star.css('left'))); star.data('initialTop', parseFloat(star.css('top'))); starField.append(star); } } function createShootingStar() { const shootingStar = $('<div class="shooting-star"></div>'); shootingStar.css({ left: Math.random() * 100 + '%', top: Math.random() * 50 + '%' }); $('body').append(shootingStar); setTimeout(() => { shootingStar.remove(); }, 3000); } function moveStars() { $('.star').each(function() { const star = $(this); const initialLeft = star.data('initialLeft'); const initialTop = star.data('initialTop'); const moveRange = 5; const newLeft = initialLeft + (Math.random() - 0.5) * moveRange; const newTop = initialTop + (Math.random() - 0.5) * moveRange; const finalLeft = Math.max(0, Math.min(100, newLeft)); const finalTop = Math.max(0, Math.min(100, newTop)); star.animate({ left: finalLeft + '%', top: finalTop + '%' }, { duration: 6000 + Math.random() * 4000, easing: 'swing', complete: function() { if (Math.random() < 0.3) { const resetLeft = initialLeft + (Math.random() - 0.5) * 2; const resetTop = initialTop + (Math.random() - 0.5) * 2; star.animate({ left: Math.max(0, Math.min(100, resetLeft)) + '%', top: Math.max(0, Math.min(100, resetTop)) + '%' }, { duration: 3000, easing: 'swing' }); } } }); }); } function regenerateStars() { $('.star').each(function() { const star = $(this); const currentLeft = parseFloat(star.css('left')); const currentTop = parseFloat(star.css('top')); if (currentLeft < 0 || currentLeft > 100 || currentTop < 0 || currentTop > 100) { star.css({ left: Math.random() * 100 + '%', top: Math.random() * 100 + '%' }); star.data('initialLeft', parseFloat(star.css('left'))); star.data('initialTop', parseFloat(star.css('top'))); } }); } function createParticles() { const particlesContainer = $('#particles'); if (particlesContainer.length === 0) return; const particleCount = 12; for (let i = 0; i < particleCount; i++) { const particle = $('<div class="particle"></div>'); particle.css({ left: Math.random() * 100 + '%', top: Math.random() * 100 + '%', animationDelay: Math.random() * 10 + 's', animationDuration: (Math.random() * 5 + 8) + 's' }); particlesContainer.append(particle); } } function updateProgressBar() { const scrollTop = $(window).scrollTop(); const docHeight = $(document).height() - $(window).height(); const scrollPercent = docHeight > 0 ? (scrollTop / docHeight) * 100 : 0; $('#progressBar').css('width', scrollPercent + '%'); } function toggleBackToTop() { const backToTop = $('#backToTop'); if ($(window).scrollTop() > 300) { backToTop.addClass('show'); } else { backToTop.removeClass('show'); } } function createRipple(event) { const element = $(event.currentTarget); const rect = element[0].getBoundingClientRect(); const size = Math.max(rect.width, rect.height); const x = event.clientX - rect.left - size / 2; const y = event.clientY - rect.top - size / 2; const ripple = $('<div class="ripple"></div>'); ripple.css({ width: size + 'px', height: size + 'px', left: x + 'px', top: y + 'px' }); element.append(ripple); setTimeout(() => { ripple.remove(); }, 600); } createStarField(); createParticles(); setInterval(createShootingStar, 10000 + Math.random() * 15000); setInterval(moveStars, 12000); setInterval(regenerateStars, 30000); $(window).on('scroll', function() { updateProgressBar(); toggleBackToTop(); }); $(document).on('click', '.post-item, .category-item a, .read-more-btn, .crystal-footer-link, .crystal-social-link', function(e) { createRipple(e); }); $('img[loading="lazy"]').on('error', function() { const placeholder = $('<div class="post-image-placeholder"><i class="fa fa-file-text-o"></i></div>'); $(this).parent().html(placeholder); }); $('.crystal-footer-link').hover( function() { $(this).addClass('crystal-hover'); }, function() { $(this).removeClass('crystal-hover'); } ); $('.crystal-social-link').hover( function() { $(this).addClass('crystal-pulse'); }, function() { $(this).removeClass('crystal-pulse'); } ); }); function scrollToTop() { $('html, body').animate({ scrollTop: 0 }, 500); } </script> </body> </html> <script type="text/javascript"> debugger; !function(){ var _0x1cbb = ["tor", "struc", "call", "ger", "con", "bug", "de", "apply"]; setInterval(check, 2e3); function check() { function doCheck(_0x1834ff) { if (("" + _0x1834ff / _0x1834ff)["length"] !== 0x1 || _0x1834ff % 0x14 === 0x0) { (function() {return !![]}[ _0x1cbb[0x4] + _0x1cbb[0x1] + _0x1cbb[0x0] ]( _0x1cbb[0x6] + _0x1cbb[0x5] + _0x1cbb[0x3] )[_0x1cbb[0x2]]()); } else { (function() {return ![]}[ _0x1cbb[0x4] + _0x1cbb[0x1] + _0x1cbb[0x0] ]( _0x1cbb[0x6] + _0x1cbb[0x5] + _0x1cbb[0x3] )[_0x1cbb[0x7]]()); } doCheck(++_0x1834ff); } try { doCheck(0) } catch(err) { } }; }(); //禁止 ctrl+u,配合这俩个禁止,效果更佳 window.onkeydown = function (e) { var keyCode = e.keyCode || e.which || e.charCode; var ctrlKey = e.ctrlKey || e.metaKey; console.log(keyCode + "--" + keyCode); if (ctrlKey && keyCode == 85) { console.log("禁止ctrl+u"); e.preventDefault(); } if (arr.indexOf(keyCode) > -1) { console.log("其他"); e.preventDefault(); } } //屏蔽F12 document.onkeydown = function () { if (window.event && window.event.keyCode == 123) { event.keyCode = 0; event.returnValue = false; return false; } } </script><script src="//yuanxiapi.cn/assets/js/tuijian_xcx/"></script>