网站TDK抓取API快速获取指南

在当今数字化营销时代,高效获取和分析网站的TDK(即Title标题、Description描述、Keywords关键词)信息,对于SEO优化、竞争情报分析乃至内容策略制定都至关重要。手动逐页查看显然效率低下,此时,掌握通过API快速抓取网站TDK的技术,便成为一项极具价值的技能。本指南将为您提供一份详尽、可操作的分步教程,帮助您从零开始,快速构建属于自己的网站TDK抓取工具,并规避过程中常见的陷阱。


第一步:明确目标与选择技术方案 在开始编写代码之前,首先需要明确您的具体需求:您是仅需抓取少量特定页面的TDK,还是需要大规模、自动化地抓取成千上万的网页?目标不同,技术选型也会有所差异。对于大多数情况,使用一门编程语言配合其强大的HTTP请求库和HTML解析库是最高效的方案。Python因其简洁的语法和丰富的生态(如requests, BeautifulSoup, Scrapy)成为首选。此外,您需要考虑目标网站是否有反爬机制,简单的静态页面与复杂的动态渲染页面(如使用JavaScript加载内容)的处理方式也不同。对于后者,可能需要用到Selenium或Playwright这类浏览器自动化工具。


第二步:搭建基础开发环境 确保您的计算机上已安装Python环境(建议3.6及以上版本)。接下来,使用pip(Python包管理器)安装必要的库。打开命令行终端,依次输入以下命令进行安装: pip install requests beautifulsoup4 如果目标网站是动态加载的,您可能还需要安装: pip install selenium 同时,需要下载对应的浏览器驱动(如ChromeDriver)并配置到系统路径中。


第三步:理解HTTP请求与HTML结构 核心原理是模拟浏览器向目标网址发送一个HTTP GET请求,服务器返回HTML代码,我们再从HTML中提取位于区域的TDK标签。Title通常位于标签内,Description和Keywords则通常包含在<meta name="description" content="...">和<meta name="keywords" content="...">中。了解这一结构,是精准抓取数据的基础。 <img class='ue-image' width='100%' src='http://qq-shuazan.com/assets/img/random/268.jpg'> <hr> <p class=article><strong>第四步:编写静态页面TDK抓取脚本(以Python为例)</strong> 下面是一个使用Requests和BeautifulSoup库的基础示例代码,请仔细阅读注释: import requests from bs4 import BeautifulSoup def fetch_tdk(url): try: # 发送HTTP GET请求,设置超时和模拟常用浏览器头部 headers = {'User-Agent': 'Mozilla/5.0'} response = requests.get(url, headers=headers, timeout=10) response.raise_for_status # 检查请求是否成功 response.encoding = response.apparent_encoding # 智能识别编码 # 使用BeautifulSoup解析HTML soup = BeautifulSoup(response.text, 'html.parser') # 提取Title title_tag = soup.find('title') title = title_tag.string if title_tag else '未找到标题' # 提取Description meta_desc = soup.find('meta', attrs={'name': 'description'}) description = meta_desc['content'] if meta_desc and meta_desc.get('content') else '未找到描述' # 提取Keywords meta_keywords = soup.find('meta', attrs={'name': 'keywords'}) keywords = meta_keywords['content'] if meta_keywords and meta_keywords.get('content') else '未找到关键词' return { 'url': url, 'title': title.strip, 'description': description.strip, 'keywords': keywords.strip } except requests.exceptions.RequestException as e: return {'url': url, 'error': f'网络请求出错: {e}'} except Exception as e: return {'url': url, 'error': f'解析过程中出现未知错误: {e}'} # 调用函数示例 if __name__ == '__main__': result = fetch_tdk('https://www.example.com') print(result) 这段代码构成了一个最基础的TDK抓取API核心。您可以将此函数封装为一个Web API端点(使用Flask或FastAPI框架),从而通过HTTP请求调用。 <hr> <p class=article><strong>第五步:处理动态页面与反爬策略</strong> 当面对使用JavaScript渲染的网站时,上述代码可能无法获取到正确的TDK,因为初始HTML中可能不包含这些元素。此时需要使用Selenium等工具。一个简化的Selenium示例片段如下: from selenium import webdriver from selenium.webdriver.chrome.options import Options def fetch_tdk_dynamic(url): chrome_options = Options chrome_options.add_argument('--headless') # 无头模式,不显示浏览器界面 driver = webdriver.Chrome(options=chrome_options) try: driver.get(url) # 等待页面加载完成,可加入显式等待(WebDriverWait)确保元素出现 driver.implicitly_wait(5) title = driver.title # 通过JavaScript查找meta标签 description = driver.execute_script("return document.querySelector('meta[name=\"description\"]')?.content || ") keywords = driver.execute_script("return document.querySelector('meta[name=\"keywords\"]')?.content || ") return {'title': title, 'description': description, 'keywords': keywords} finally: driver.quit 请注意,使用Selenium会显著增加资源消耗和时间成本,因此仅必要时使用。 <hr> <p class=article><strong>第六步:构建完整的API服务与优化</strong> 要将脚本变为一个可对外提供服务的API,您可以使用轻量级的Web框架。以下是一个使用Flask的极简示例: from flask import Flask, request, jsonify app = Flask(__name__) @app.route('/api/fetch_tdk', methods=['GET']) def api_fetch_tdk: url = request.args.get('url') if not url: return jsonify({'error': '缺少url参数'}), 400 # 根据情况调用上面定义的fetch_tdk或fetch_tdk_dynamic函数 result = fetch_tdk(url) return jsonify(result) if __name__ == '__main__': app.run(debug=True) 运行此脚本后,您就可以通过访问 http://127.0.0.1:5000/api/fetch_tdk?url=https://www.target.com 来获取TDK数据了。进一步的优化包括:加入请求频率限制(Rate Limiting)、缓存机制(如Redis缓存已抓取结果)、异步处理(使用Celery处理队列任务)以支持高并发,以及完善的错误日志记录。 <hr> <p class=article><strong>第七步:部署与安全考量</strong> 在将API部署到生产环境(如云服务器)时,安全至关重要。务必注意:1. <strong>输入验证与净化</strong>:严格检查传入的URL参数,防止SSRF(服务器端请求伪造)等攻击。2. <strong>设置合理的超时和重试</strong>:避免因目标网站无响应而长期占用您的API资源。3. <strong>遵守robots.txt</strong>:在大规模抓取前,检查目标网站的robots.txt文件,尊重其爬虫协议,避免法律风险。4. <strong>使用代理IP池</strong>:对于大规模抓取,使用轮换代理IP可以有效防止因请求过于频繁而被封禁。 <hr> <p class=article><strong>常见错误与排坑指南</strong> 1. <strong>编码错误</strong>:中文字符出现乱码。务必在获取响应后正确检测和设置编码(如response.encoding = response.apparent_encoding)。<br>2. <strong>标签缺失或属性名不同</strong>:并非所有网站都严格按照标准命名meta标签,例如可能出现<meta property="og:description" ...>。您的代码需要具备一定的容错性,可以尝试查找多种可能的属性名。<br>3. <strong>请求被拒绝(403错误)</strong>:网站启用了反爬。解决方案包括完善请求头(模拟真实浏览器,添加Referer等)、降低请求频率、使用代理IP。<br>4. <strong>SSL证书验证错误</strong>:在请求某些HTTPS网站时可能遇到。对于内部或测试用途,可以在requests请求中添加verify=False参数,但生产环境中不推荐,存在安全风险。<br>5. <strong>动态内容加载超时</strong>:使用Selenium时,页面元素尚未加载完成就已开始抓取。务必加入足够的等待时间,或使用显式等待(WebDriverWait)条件。<br>6. <strong>API性能瓶颈</strong>:同步处理大量请求会导致阻塞。考虑采用异步框架(如FastAPI + httpx)或引入任务队列来提升吞吐量。 <hr> <p class=article>通过遵循以上七个详细步骤,并时刻警惕常见的错误陷阱,您将能够构建一个稳定、高效且可扩展的网站TDK抓取API。这项技能不仅能自动化您的SEO工作流程,更能为数据驱动的决策提供强大的底层支持。请记住,技术实践的同时务必遵守网络道德与相关法律法规,合理、善意地使用爬虫技术。现在,就请动手尝试,开启您的数据抓取之旅吧!</p> </div> <footer class="article-footer"> <div class="article-tags"> <span class="tag-label"> <i class="layui-icon layui-icon-tabs"></i> 标签: </span> <span class="tag-item">API接口</span> </div> <div class="article-actions"> <button type="button" class="action-btn like-btn" id="likeBtn"> <i class="layui-icon layui-icon-praise"></i> <span class="action-text">点赞</span> <span class="action-count">0</span> </button> <button type="button" class="action-btn share-btn" id="shareBtn"> <i class="layui-icon layui-icon-share"></i> <span class="action-text">分享</span> </button> </div> <div class="article-info"> <div class="info-item"> <i class="layui-icon layui-icon-file"></i> <span>字数统计:4,886 字</span> </div> <div class="info-item"> <i class="layui-icon layui-icon-edit"></i> <span>最后更新:2026-09-23 23:41:45</span> </div> </div> </footer> </article> <section class="article-navigation"> <div class="nav-container"> <a href="https://qq-shuazan.com/article/33095.html" class="nav-item2 nav-prev"> <div class="nav-direction"> <i class="layui-icon layui-icon-left"></i> <span>上一篇</span> </div> <div class="nav-title">网站TDK信息高效获取API发布</div> </a> <a href="https://qq-shuazan.com/article/33104.html" class="nav-item2 nav-next"> <div class="nav-direction"> <span>下一篇</span> <i class="layui-icon layui-icon-right"></i> </div> <div class="nav-title">百度关键词与流量评估小时报</div> </a> </div> </section> <section class="related-section"> <div class="section-header"> <h2 class="section-title"> <i class="layui-icon layui-icon-light"></i> 相关推荐 </h2> <div class="section-decoration"></div> </div> <div class="related-grid"> <a href="https://qq-shuazan.com/article/33104.html" class="related-item" title="百度关键词与流量评估小时报"> <div class="related-content"> <h3 class="related-title">百度关键词与流量评估小时报</h3> <div class="related-meta"> <span class="related-time"> <i class="layui-icon layui-icon-time"></i> 09-23 </span> <span class="related-views"> <i class="layui-icon layui-icon-read"></i> 0 </span> </div> </div> <div class="related-arrow"> <i class="layui-icon layui-icon-right"></i> </div> </a> <a href="https://qq-shuazan.com/article/33103.html" class="related-item" title="百度API流量关键词评估年度总结"> <div class="related-content"> <h3 class="related-title">百度API流量关键词评估年度总结</h3> <div class="related-meta"> <span class="related-time"> <i class="layui-icon layui-icon-time"></i> 09-23 </span> <span class="related-views"> <i class="layui-icon layui-icon-read"></i> 0 </span> </div> </div> <div class="related-arrow"> <i class="layui-icon layui-icon-right"></i> </div> </a> <a href="https://qq-shuazan.com/article/33102.html" class="related-item" title="百度移动权重查询API:如何评估关键词与预估流量?"> <div class="related-content"> <h3 class="related-title">百度移动权重查询API:如何评估关键词与预估流量?</h3> <div class="related-meta"> <span class="related-time"> <i class="layui-icon layui-icon-time"></i> 09-23 </span> <span class="related-views"> <i class="layui-icon layui-icon-read"></i> 0 </span> </div> </div> <div class="related-arrow"> <i class="layui-icon layui-icon-right"></i> </div> </a> <a href="https://qq-shuazan.com/article/33101.html" class="related-item" title="百度收录量查询API及域名收录获取方法"> <div class="related-content"> <h3 class="related-title">百度收录量查询API及域名收录获取方法</h3> <div class="related-meta"> <span class="related-time"> <i class="layui-icon layui-icon-time"></i> 09-23 </span> <span class="related-views"> <i class="layui-icon layui-icon-read"></i> 0 </span> </div> </div> <div class="related-arrow"> <i class="layui-icon layui-icon-right"></i> </div> </a> <a href="https://qq-shuazan.com/article/33100.html" class="related-item" title="百度收录查询API-实时获取域名收录数"> <div class="related-content"> <h3 class="related-title">百度收录查询API-实时获取域名收录数</h3> <div class="related-meta"> <span class="related-time"> <i class="layui-icon layui-icon-time"></i> 09-23 </span> <span class="related-views"> <i class="layui-icon layui-icon-read"></i> 0 </span> </div> </div> <div class="related-arrow"> <i class="layui-icon layui-icon-right"></i> </div> </a> <a href="https://qq-shuazan.com/article/33099.html" class="related-item" title="百度收录查询API:实时获取域名收录数,优化SEO"> <div class="related-content"> <h3 class="related-title">百度收录查询API:实时获取域名收录数,优化SEO</h3> <div class="related-meta"> <span class="related-time"> <i class="layui-icon layui-icon-time"></i> 09-23 </span> <span class="related-views"> <i class="layui-icon layui-icon-read"></i> 1 </span> </div> </div> <div class="related-arrow"> <i class="layui-icon layui-icon-right"></i> </div> </a> </div> </section> </main> <aside class="article-sidebar"> <div class="sidebar-sticky"> <div class="sidebar-card"> <div class="card-header"> <h3 class="card-title"> <i class="layui-icon layui-icon-chart"></i> 文章统计 </h3> </div> <div class="card-content"> <div class="stats-grid"> <div class="stat-item"> <div class="stat-icon"> <i class="layui-icon layui-icon-read"></i> </div> <div class="stat-info"> <div class="stat-number">2</div> <div class="stat-label">阅读量</div> </div> </div> <div class="stat-item"> <div class="stat-icon"> <i class="layui-icon layui-icon-praise"></i> </div> <div class="stat-info"> <div class="stat-number">0</div> <div class="stat-label">点赞数</div> </div> </div> <div class="stat-item"> <div class="stat-icon"> <i class="layui-icon layui-icon-file"></i> </div> <div class="stat-info"> <div class="stat-number">4,886</div> <div class="stat-label">字数</div> </div> </div> <div class="stat-item"> <div class="stat-icon"> <i class="layui-icon layui-icon-time"></i> </div> <div class="stat-info"> <div class="stat-number">17</div> <div class="stat-label">分钟阅读</div> </div> </div> </div> </div> </div> <div class="sidebar-card"> <div class="card-header"> <h3 class="card-title"> <i class="layui-icon layui-icon-tabs"></i> 热门标签 </h3> </div> <div class="card-content"> <div class="tag-cloud"> <a href="https://qq-shuazan.com/article/5031.html" class="tag-item"> <span class="tag-text">互联资讯</span> <span class="tag-count">2501</span> </a> <a href="https://qq-shuazan.com/article/2790.html" class="tag-item"> <span class="tag-text">网页介绍</span> <span class="tag-count">2366</span> </a> <a href="https://qq-shuazan.com/article/32551.html" class="tag-item"> <span class="tag-text">热门业务</span> <span class="tag-count">13434</span> </a> <a href="https://qq-shuazan.com/article/19215.html" class="tag-item"> <span class="tag-text">查询工具</span> <span class="tag-count">5433</span> </a> <a href="https://qq-shuazan.com/article/13741.html" class="tag-item"> <span class="tag-text">云服务器</span> <span class="tag-count">977</span> </a> <a href="https://qq-shuazan.com/article/31380.html" class="tag-item"> <span class="tag-text">游戏资讯</span> <span class="tag-count">4613</span> </a> <a href="https://qq-shuazan.com/article/19312.html" class="tag-item"> <span class="tag-text">生辰八字</span> <span class="tag-count">1054</span> </a> <a href="https://qq-shuazan.com/article/33104.html" class="tag-item"> <span class="tag-text">API接口</span> <span class="tag-count">1239</span> </a> <a href="https://qq-shuazan.com/article/27307.html" class="tag-item"> <span class="tag-text">万能工具</span> <span class="tag-count">947</span> </a> <a href="https://qq-shuazan.com/article/29412.html" class="tag-item"> <span class="tag-text">多多助力</span> <span class="tag-count">243</span> </a> </div> </div> </div> </div> </aside> </div> </div> </div> <div class="share-modal" id="shareModal"> <div class="modal-overlay"></div> <div class="modal-content"> <div class="modal-header"> <h3 class="modal-title">分享文章</h3> <button class="modal-close" id="shareClose"> <i class="layui-icon layui-icon-close"></i> </button> </div> <div class="modal-body"> <div class="share-options"> <a href="#" class="share-option wechat" id="shareWechat"> <div class="share-icon"> <i class="layui-icon layui-icon-chat"></i> </div> <span>微信</span> </a> <a href="#" class="share-option weibo" id="shareWeibo"> <div class="share-icon"> <i class="layui-icon layui-icon-share"></i> </div> <span>微博</span> </a> <a href="#" class="share-option qq" id="shareQQ"> <div class="share-icon"> <i class="layui-icon layui-icon-dialogue"></i> </div> <span>QQ空间</span> </a> <a href="#" class="share-option copy" id="shareCopy"> <div class="share-icon"> <i class="layui-icon layui-icon-file"></i> </div> <span>复制链接</span> </a> </div> <div class="share-url"> <input type="text" class="url-input" value="https://qq-shuazan.com/article/33096.html" readonly id="shareUrl"> <button class="copy-btn" id="copyBtn"> <i class="layui-icon layui-icon-file"></i> 复制 </button> </div> </div> </div> </div> <button class="back-to-top" id="backToTop"> <i class="layui-icon layui-icon-top"></i> </button> <link rel="stylesheet" type="text/css" href="https://qq-shuazan.com/template/article15/assets/css/foot.css" /> <div class="friend-links-section"> <div class="layui-container"> <div class="friend-links-header"> <h3 class="section-title"> <i class="layui-icon layui-icon-link"></i> 友情链接 </h3> <p class="section-desc">与优质网站互相推荐,共同成长</p> </div> <div class="friend-links-list"> <a href="https://www.yilianshuju.com/" target="_blank"class="link-item"><img style="width:18px;height:18px;margin:0auto;" src="https://yuanxiapi.cn/api/?id=28&key=6_83efcf5ff864b4998b6158804a51f3ad&url=https://www.yilianshuju.com"><font color="#059309">API接口</font></a> <a href="https://www.zongxincha.com/" target="_blank"class="link-item"><img style="width:18px;height:18px;margin:0auto;" src="https://yuanxiapi.cn/api/?id=28&key=6_83efcf5ff864b4998b6158804a51f3ad&url=https://www.zongxincha.com"><font color="#059309">综信查</font></a> <a href="https://yuanxiblog.cn/" target="_blank" class="link-item"><img style="width:18px;height:18px;margin:0auto;" src="https://yuanxiapi.cn/api/?id=28&key=6_83efcf5ff864b4998b6158804a51f3ad&url=https://yuanxiblog.cn/"><font color="#059309">远昔博客</font></a> <a href="http://yibazhan.cn/" target="_blank" class="link-item"><img style="width:18px;height:18px;margin:0auto;" src="https://yuanxiapi.cn/api/?id=28&key=6_83efcf5ff864b4998b6158804a51f3ad&url=https://yibazhan.cn/"><font color="#059309">易扒站</font></a> <a href="http://yichazhan.cn/" target="_blank" class="link-item"><img style="width:18px;height:18px;margin:0auto;" src="https://yuanxiapi.cn/api/?id=28&key=6_83efcf5ff864b4998b6158804a51f3ad&url=https://yichazhan.cn/"><font color="#059309">易查站</font></a> <a href="https://www.yuanxi8.cn/" target="_blank" class="link-item"><img style="width:18px;height:18px;margin:0auto;" src="https://yuanxiapi.cn/api/?id=28&key=6_83efcf5ff864b4998b6158804a51f3ad&url=https://yuanxiblog.cn/"><font color="#059309">远昔导航</font></a> <a href="https://www.yiguzhi.cn/" target="_blank" title="易估值" class="link-item"><img style="width:18px;height:18px;margin:0auto;" src="https://yuanxiapi.cn/api/?id=28&key=6_83efcf5ff864b4998b6158804a51f3ad&url=https://www.yiguzhi.cn/"><font color="#059309">易估值</font></a> <a href="https://www.hbdrxws.com/" target="_blank" title="助推者" class="link-item"><img style="width:18px;height:18px;margin:0auto;" src="https://yuanxiapi.cn/api/?id=28&key=6_83efcf5ff864b4998b6158804a51f3ad&url=https://www.hbdrxws.com/"><font color="#059309">助推者</font></a> <a href="http://www.081234.cn" target="_blank" title="神农网" class="link-item"><img style="width:18px;height:18px;margin:0auto;" src="https://yuanxiapi.cn/api/?id=28&key=6_83efcf5ff864b4998b6158804a51f3ad&url=http://www.081234.cn/"><font color="#059309">神农网</font></a> </div> </div> </div> <footer class="site-footer"> <div class="layui-container"> <div class="footer-content"> <div class="layui-row layui-col-space30"> <div class="layui-col-md4 layui-col-sm12"> <div class="footer-brand"> <a href="https://qq-shuazan.com/" class="footer-logo"> <div class="logo-icon"> <i class="layui-icon layui-icon-diamond"></i> </div> <div class="brand-info"> <h4>QQ技术导航收录网</h4> <p>专业导航平台</p> </div> </a> <p class="footer-desc"> 致力于为用户提供最优质的网站导航服务,精心筛选每一个收录网站,为您的网络生活提供便利。 </p> <div class="footer-features"> <span class="feature-item"> <i class="layui-icon layui-icon-ok"></i> 精选优质 </span> <span class="feature-item"> <i class="layui-icon layui-icon-ok"></i> 安全可靠 </span> <span class="feature-item"> <i class="layui-icon layui-icon-ok"></i> 持续更新 </span> </div> </div> </div> <div class="layui-col-md2 layui-col-sm6"> <div class="footer-links"> <h4 class="link-title">快速导航</h4> <ul class="link-list"> <li><a href="https://qq-shuazan.com/">网站首页</a></li> <li><a href="#">最新收录</a></li> <li><a href="#">热门推荐</a></li> <li><a href="#">分类浏览</a></li> </ul> </div> </div> <div class="layui-col-md2 layui-col-sm6"> <div class="footer-links"> <h4 class="link-title">服务支持</h4> <ul class="link-list"> <li><a href="#">网站提交</a></li> <li><a href="#">使用帮助</a></li> <li><a href="#">常见问题</a></li> <li><a href="#">联系我们</a></li> </ul> </div> </div> <div class="layui-col-md2 layui-col-sm6"> <div class="footer-links"> <h4 class="link-title">关于我们</h4> <ul class="link-list"> <li><a href="#">平台介绍</a></li> <li><a href="#">发展历程</a></li> <li><a href="#">隐私政策</a></li> <li><a href="#">服务条款</a></li> </ul> </div> </div> <div class="layui-col-md2 layui-col-sm6"> <div class="footer-contact"> <h4 class="contact-title">联系我们</h4> <div class="contact-info"> <div class="contact-item"> <i class="layui-icon layui-icon-login-qq"></i> <span>2646906096</span> </div> <div class="contact-item"> <i class="layui-icon layui-icon-email"></i> <span>2646906096@qq.com</span> </div> <div class="contact-item"> <i class="layui-icon layui-icon-time"></i> <span>7×24小时服务</span> </div> </div> <div class="social-links"> <span class="social-text">关注我们</span> <div class="social-icons"> <a href="#" class="social-link" title="微信"> <i class="layui-icon layui-icon-chat"></i> </a> <a href="#" class="social-link" title="QQ"> <i class="layui-icon layui-icon-dialogue"></i> </a> <a href="#" class="social-link" title="邮箱"> <i class="layui-icon layui-icon-email"></i> </a> <a href="#" class="social-link" title="GitHub"> <i class="layui-icon layui-icon-github"></i> </a> </div> </div> </div> </div> </div> </div> <div class="footer-bottom"> <div class="copyright-info"> <div class="copyright-left"> <span class="copyright-text"> Copyright © 2021-2026 QQ技术导航收录网 All Rights Reserved. </span> </div> <div class="copyright-right"> <span class="build-info"> <i class="layui-icon layui-icon-time"></i> 最后更新:2026-09-23 </span> </div> </div> </div> </div> </footer> <div class="float-tools"> <div class="tool-item back-to-top" id="backToTop" title="返回顶部"> <i class="layui-icon layui-icon-up"></i> </div> </div> <div class="progress-bar"> <div class="progress-fill"></div> </div> <script> document.addEventListener('DOMContentLoaded', function() { const backToTop = document.getElementById('backToTop'); if (backToTop) { backToTop.addEventListener('click', function() { window.scrollTo({ top: 0, behavior: 'smooth' }); }); } window.addEventListener('scroll', function() { const scrollTop = window.pageYOffset || document.documentElement.scrollTop; const windowHeight = window.innerHeight; const documentHeight = document.documentElement.scrollHeight; if (scrollTop > 300) { backToTop.classList.add('show'); } else { backToTop.classList.remove('show'); } const progress = (scrollTop / (documentHeight - windowHeight)) * 100; const progressFill = document.querySelector('.progress-fill'); if (progressFill) { progressFill.style.width = Math.min(progress, 100) + '%'; } }); document.querySelectorAll('a[href^="#"]').forEach(function(link) { if (link.getAttribute('href') !== '#') { link.addEventListener('click', function(e) { const target = document.querySelector(this.getAttribute('href')); if (target) { e.preventDefault(); target.scrollIntoView({ behavior: 'smooth', block: 'start' }); } }); } }); window.dispatchEvent(new Event('scroll')); }); </script> <script src="https://qq-shuazan.com/assets/layui/layui.js"></script> <script src="https://qq-shuazan.com/assets/js/jquery/3.4.1/jquery.min.js"></script> <script> layui.use(['layer'], function() { var layer = layui.layer; $(document).ready(function() { setTimeout(function() { $('body').addClass('loaded'); }, 100); function updateReadingProgress() { var scrollTop = $(window).scrollTop(); var docHeight = $(document).height(); var winHeight = $(window).height(); var scrollPercent = (scrollTop) / (docHeight - winHeight); var scrollPercentRounded = Math.round(scrollPercent * 100); $('#readingProgress').css('width', scrollPercentRounded + '%'); } $(window).on('scroll', updateReadingProgress); $('#likeBtn').on('click', function(e) { e.preventDefault(); var $btn = $(this); var $count = $btn.find('.action-count'); var currentLikes = parseInt($count.text()); if ($btn.hasClass('liked')) { layer.msg('您已经点过赞了!', {icon: 2, time: 1500}); return; } $.ajax({ type: 'POST', url: 'https://qq-shuazan.com/ajax.php?act=dianzan', data: {id:'33096',type:2}, dataType : 'json', success:function(result){ if (result.code !== 200) { return layer.msg(result.msg, {icon: 2, time: 1500}); } $btn.addClass('liked'); $count.text(currentLikes + 1); $('#likeCount').text(currentLikes + 1); $btn.addClass('animate-like'); setTimeout(function() { $btn.removeClass('animate-like'); }, 600); layer.msg('点赞成功!', {icon: 1, time: 1000}); }, error:function(){ return layer.msg('系统错误,请检查网络或联系管理员', {icon: 2, time: 1000}); } }); }); $('#shareBtn').on('click', function(e) { e.preventDefault(); $('#shareModal').addClass('show'); $('body').addClass('no-scroll'); }); function closeShareModal() { $('#shareModal').removeClass('show'); $('body').removeClass('no-scroll'); } $('#shareClose, .modal-overlay').on('click', closeShareModal); $(document).on('keydown', function(e) { if (e.keyCode === 27 && $('#shareModal').hasClass('show')) { closeShareModal(); } }); var currentUrl = encodeURIComponent(window.location.href); var currentTitle = encodeURIComponent('网站TDK抓取API快速获取指南'); var currentDesc = encodeURIComponent('在当今数字化营销时代,高效获取和分析网站的TDK(即Title标题、Description描述、Keywords关键词)信息,对于SEO优化、竞争情报分析乃至内容策略制定都至关重要。手动逐页查看显然效率低下,此时,掌握通过API快速抓取网站...'); $('#shareWeibo').on('click', function(e) { e.preventDefault(); var url = 'https://service.weibo.com/share/share.php?url=' + currentUrl + '&title=' + currentTitle + '&pic=&appkey='; window.open(url, '_blank', 'width=600,height=400'); }); $('#shareQQ').on('click', function(e) { e.preventDefault(); var url = 'https://sns.qzone.qq.com/cgi-bin/qzshare/cgi_qzshare_onekey?url=' + currentUrl + '&title=' + currentTitle + '&desc=' + currentDesc; window.open(url, '_blank', 'width=600,height=400'); }); $('#shareWechat').on('click', function(e) { e.preventDefault(); layer.msg('请复制链接分享到微信', {icon: 1, time: 2000}); }); $('#copyBtn, #shareCopy').on('click', function(e) { e.preventDefault(); var $input = $('#shareUrl'); $input.select(); document.execCommand('copy'); var $btn = $('#copyBtn'); $btn.addClass('success').html('<i class="layui-icon layui-icon-ok"></i> 已复制'); layer.msg('链接已复制到剪贴板', {icon: 1, time: 1500}); setTimeout(function() { $btn.removeClass('success').html('<i class="layui-icon layui-icon-file"></i> 复制'); }, 2000); }); function toggleBackToTop() { if ($(window).scrollTop() > 300) { $('#backToTop').addClass('show'); } else { $('#backToTop').removeClass('show'); } } $(window).on('scroll', toggleBackToTop); toggleBackToTop(); $('#backToTop').on('click', function(e) { e.preventDefault(); $('html, body').animate({scrollTop: 0}, 500); }); function initCodeHighlight() { var $codeBlocks = $('#articleContent pre, #articleContent code'); $codeBlocks.each(function() { var $code = $(this); if ($code.is('pre')) { var $copyBtn = $('<button class="code-copy-btn" title="复制代码"><i class="layui-icon layui-icon-file"></i></button>'); $code.css('position', 'relative').append($copyBtn); $copyBtn.on('click', function(e) { e.preventDefault(); var text = $code.text(); var $temp = $('<textarea>'); $('body').append($temp); $temp.val(text).select(); document.execCommand('copy'); $temp.remove(); layer.msg('代码已复制', {icon: 1, time: 1000}); }); } }); } initCodeHighlight(); function optimizeContent() { var $content = $('#articleContent'); $content.find('table').each(function() { $(this).wrap('<div class="table-responsive"></div>'); }); $content.find('a[href^="http"]').each(function() { var $link = $(this); var href = $link.attr('href'); if (href.indexOf(window.location.hostname) === -1) { $link.attr('target', '_blank') .attr('rel', 'noopener noreferrer') .append(' <i class="layui-icon layui-icon-link" style="font-size: 12px;"></i>'); } }); $content.find('p').addClass('content-paragraph'); } optimizeContent(); $(document).on('keydown', function(e) { if (e.keyCode === 27 && $('#shareModal').hasClass('show')) { closeShareModal(); } }); function initStickySidebar() { var $sidebar = $('.sidebar-sticky'); var $main = $('.article-main'); if ($(window).width() > 768) { $(window).on('scroll resize', function() { var scrollTop = $(window).scrollTop(); var mainHeight = $main.outerHeight(); var sidebarHeight = $sidebar.outerHeight(); var windowHeight = $(window).height(); if (sidebarHeight < windowHeight && mainHeight > sidebarHeight) { if (scrollTop > 100) { $sidebar.addClass('sticky'); } else { $sidebar.removeClass('sticky'); } } }); } } initStickySidebar(); function handleResponsive() { if ($(window).width() <= 768) { $('.sidebar-sticky').removeClass('sticky'); } } $(window).on('resize', handleResponsive); handleResponsive(); setTimeout(function() { updateReadingProgress(); $('body').addClass('content-loaded'); }, 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>