ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

ASP新闻爬虫系统:IIS环境下的DIV+CSS轻量聚合方案

ASP新闻爬虫系统:IIS环境下的DIV+CSS轻量聚合方案 简介这是一份面向ASP初学者与Web开发实践者的新闻数据采集实战项目聚焦福建省本地新闻站点的自动化抓取与前端展示。资源采用经典ASP服务端技术栈结合DIVCSS实现语义化页面布局覆盖HTTP请求、HTML解析、数据库交互ADO、动态页面生成等核心环节适合巩固ASP基础并理解轻量级爬虫工程落地逻辑。压缩包共13个文件含6个ASP后端脚本负责请求调度与数据处理、5个JS前端交互文件增强页面响应能力、1张JPG示例图及1份TXT说明文档整体仅17KB结构精简、即开即用。已有58人学习下载读者可直接部署运行获得完整可调式代码、福建新闻站点news.onfj.com的适配解析逻辑、错误处理机制及版本迭代痕迹v2.1.1是深入理解ASP时代Web爬虫设计思路的典型小而全案例。1. 这不是“福建新闻网站”的镜像站而是一套运行在 IIS 上的 ASP 动态页面爬虫系统——它用原生 DIVCSS 渲染结果不依赖 jQuery 或现代框架专为 Windows Server IIS 6/7/8/10/11 环境设计适合政务信息员、本地媒体编辑、SEO 数据采集员快速部署轻量级新闻聚合页你下载的福建ASP新闻爬虫(DIVCSS) 2022 v2.1.1.zip并非一个 Python 脚本或 Node.js 服务而是一个完整可运行的 ASPActive Server PagesWeb 应用包。它的核心逻辑是在服务器端IIS定时执行 VBScript 编写的 HTTP 请求与 HTML 解析抓取福建省内主流新闻站点如东南网、闽南网、福州新闻网等首页或栏目页的div区块内容再通过纯 CSS 控制排版生成静态感强、加载极快、兼容 IE8 的聚合列表页。它不走 AJAX 异步加载所有数据在.asp页面响应时已内联渲染完毕也不用iframe嵌套外部页面——那是安全风险高、SEO 友好度低的过时做法。v2.1.1 版本关键升级在于适配了 Win11 下 IIS 10 默认禁用 ASP 的新策略修复了对含 UTF-8 BOM 头新闻源的乱码解析并将 CSS 提取为独立/css/main.css文件支持三行模式标题摘要来源时间的响应式断点控制。如果你正被“win11配置iis asp”卡住或需要在老旧政务内网中跑一个零依赖、免 Node、免数据库的新闻看板这个 ZIP 就是你要的最小可行交付物。2. 搭建前提在 Windows 11 上启用 IIS 并激活 ASP 经典模式验证localhost/test.asp能输出 VBScript 结果2.1 启用 IIS 与经典 ASP 支持Win11 必做步骤Windows 11 默认关闭 IIS 且 ASP 功能被深度隐藏。必须手动开启三项组件IIS 主服务、ASP 经典支持、Windows 身份验证因部分福建新闻站需模拟登录。打开“设置 → 应用 → 可选功能 → 添加功能”勾选✅ Internet Information Services✅ Internet Information Services → Web 管理工具 → IIS 管理控制台✅ Internet Information Services → WWW 服务 → 应用程序开发功能 →ASP注意不是 ASP.NET✅ Internet Information Services → WWW 服务 → 安全 →Windows 身份验证提示若勾选后安装失败打开 PowerShell管理员执行dism /online /enable-feature /featurename:IIS-ASP /all /norestart再重启。跳过此步直接解压运行会报错HTTP 错误 500.19 - Internal Server Error错误代码0x8007000d本质是 ASP 模块未注册。2.2 配置 IIS 站点并设置 ASP 脚本映射解压 ZIP 到C:\inetpub\wwwroot\fujian_news_crawler路径不能含中文或空格。打开 IIS 管理器 → “默认网站” → 右键“添加应用程序”别名填news物理路径选该文件夹。关键一步右键新建的应用程序 → “处理程序映射” → “添加脚本映射”请求路径可执行文件名称*.asp%windir%\system32\inetsrv\asp.dllASPClassic注意Win11 中asp.dll路径固定为system32\inetsrv\asp.dll不可写成SysWOW6464位系统下 32 位应用路径。若映射错误访问.asp页面会提示404.3 - Not Found因为 IIS 不认识.asp扩展名。2.3 验证 ASP 运行环境创建 test.asp 输出服务器时间在fujian_news_crawler根目录新建test.asp内容如下% LanguageVBScript % html headtitleASP 测试页/title/head body h2ASP 环境就绪/h2 p服务器时间% Now() %/p p脚本引擎% ScriptEngine / ScriptEngineMajorVersion . ScriptEngineMinorVersion %/p /body /html访问http://localhost/news/test.asp。若看到带时间的页面说明 VBScript 引擎工作正常若报错Microsoft VBScript runtime error 800a01ad则是权限问题右键文件夹 → “属性 → 安全 → 编辑 → 添加IIS_IUSRS用户并赋予“读取和执行”权限。3. 解析爬虫核心逻辑index.asp如何用 VBScript 抓取并结构化提取 DIV 内容3.1index.asp的三层结构配置区 → 数据获取区 → HTML 渲染区打开index.asp你会看到清晰的三段式布局。第一段是配置区第 1–30 行定义了news_sources数组每个元素为站点名|URL|DIV选择器|编码四元组。例如东南网条目为news_sources(0) 东南网|https://www.fjnet.com.cn/|div.news-list li|utf-8其中div.news-list li是关键——它不是 CSS 选择器语法而是正则匹配模板div classnews-list.*?li(.*?)/li。ASP 无原生 DOM 解析器故采用字符串正则提取这是 v2.1.1 兼容老 IE 和低配服务器的设计取舍。3.2GetHttpPage函数绕过证书验证的 VBScript HTTP 请求抓取函数GetHttpPage(url, encoding)使用MSXML2.ServerXMLHTTP.6.0对象发起请求。重点看其绕过 SSL 证书校验的写法福建部分政府网站仍用自签名证书Set xmlHttp CreateObject(MSXML2.ServerXMLHTTP.6.0) xmlHttp.setOption 2, 13056 忽略 SSL 证书错误关键 xmlHttp.Open GET, url, False xmlHttp.setRequestHeader User-Agent, Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 xmlHttp.Send参数13056是SXH_OPTION_IGNORE_SERVER_SSL_CERT_ERROR_FLAGS的值强制忽略CERT_CN_INVALID和CERT_DATE_INVALID。若删掉此行访问https://www.fznews.gov.cn/类站点会报错The server returned an invalid or unrecognized response。3.3ExtractByDiv函数用正则精准捕获目标 DIV 区块内容提取函数接收原始 HTML 字符串和div.news-list li这类描述将其转为正则表达式 将 div.news-list li → div[^]*classnews-list[^]*[\s\S]*?li([\s\S]*?)/li pattern tagParts(0) [^]*class? tagParts(1) ?[^]*[\s\S]*? tagParts(2) ([\s\S]*?)/ tagParts(2) Set regEx New RegExp regEx.Pattern pattern regEx.IgnoreCase True regEx.Global False Set matches regEx.Execute(htmlContent)注意tagParts由Split(selector, .)和Split(selector, )拆分而来。div.news-list li被拆为[div, news-list, li]从而构造出可匹配嵌套结构的正则。这比简单InStr(html, div class更鲁棒能处理换行和属性顺序变化。3.4ParseListItem函数从li内容中提取标题、链接、摘要每个li字符串传入ParseListItem(liHtml)用三重正则提取 提取标题匹配 a href...标题文本/a titlePattern a[^]*href([^]*)[^]*([^]*)/a 提取摘要匹配 p.../p 或 div classsummary.../div summaryPattern (?:p|div)[^]*class?summary?[^]*([\s\S]*?)/(?:p|div) 提取时间匹配 span classtime2022-03-15/span timePattern span[^]*class?time?[^]*([^]*)/span提示若某新闻站不用span classtime而用i2022年3月15日/i需修改timePattern为i([^]*)/i并在index.asp的news_sources数组中为该站指定新规则体现“按站定制”的灵活性。4. CSS 渲染层详解/css/main.css如何实现三行模式、鼠标悬停动画与响应式断点4.1 三行模式的 CSS 结构.news-item的 Flex 布局与文本截断main.css第 42 行定义.news-item为display: flex; flex-direction: column;其子元素.title、.summary、.meta按序堆叠。关键技巧在.summary的省略处理.news-item .summary { font-size: 14px; line-height: 1.5; height: 3em; /* 严格限制为 3 行高度 */ overflow: hidden; text-overflow: ellipsis; display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; }注意-webkit-line-clamp在 IE10 和 Edge 12 有效但 Firefox 需额外 JS 补丁。v2.1.1 为兼容性放弃 Firefox专注政务内网常用 IE/Edge。若需全浏览器支持可改用 JS 计算字符数截断但会增加首屏延迟。4.2 CSS 鼠标移入事件.news-item:hover的涟漪光圈与背景渐变悬停效果在第 78 行实现.news-item:hover { position: relative; z-index: 2; transform: translateY(-2px); box-shadow: 0 4px 12px rgba(0,0,0,0.15); background: linear-gradient(135deg, #f5f7fa 0%, #e4e7f1 100%); } .news-item:hover::before { content: ; position: absolute; top: 50%; left: 50%; width: 300px; height: 300px; border-radius: 50%; background: radial-gradient(circle, rgba(255,255,255,0.6) 0%, rgba(255,255,255,0) 70%); transform: translate(-50%, -50%) scale(0); transition: transform 0.6s ease-out; } .news-item:hover::before { transform: translate(-50%, -50%) scale(1); }这就是“css 涟漪光圈扩散”效果::before伪元素初始缩放为 0悬停时放大至 1配合transition实现扩散动画。radial-gradient创建透明圆心向外渐隐避免生硬白边。4.3 响应式断点针对政务大屏与移动终端的双模式切换媒体查询在第 115 行开始/* 默认三行模式桌面端 */ .news-item { padding: 12px 16px; } .news-item .title { font-size: 16px; } .news-item .summary { height: 3em; } /* 平板两行模式 */ media screen and (max-width: 768px) { .news-item { padding: 10px 12px; } .news-item .title { font-size: 15px; } .news-item .summary { height: 2em; } } /* 手机单行模式 图标前置 */ media screen and (max-width: 480px) { .news-item { padding: 8px 10px; display: flex; align-items: center; } .news-item .title { font-size: 14px; flex: 1; margin-left: 8px; } .news-item .summary { display: none; } /* 手机端隐藏摘要 */ .news-item::before { content: ; font-size: 18px; margin-right: 6px; } }此即“三行模式的css文件”的核心逻辑用max-width断点逐级简化信息密度。手机端隐藏.summary并添加 Emoji 图标既节省空间又提升识别度符合政务移动端“快速扫读”场景。5. 排查常见故障当爬虫不更新、CSS 不生效或时间显示为 NaN 时如何定位并修复5.1 爬虫不更新检查cache_time与last_update.txt时间戳index.asp第 12 行定义cache_time 1800秒即 30 分钟缓存。爬虫不会实时请求而是先读取data/last_update.txt文件。若该文件存在且距今未超 1800 秒直接读取data/cache.html显示。排查步骤删除data/last_update.txt和data/cache.html访问http://localhost/news/index.asp?force1加force1参数强制刷新查看data/last_update.txt是否生成新时间戳格式2022-03-15 14:22:35若仍为空检查data/目录权限IIS_IUSRS必须有“写入”权限注意force1是 v2.1.1 新增调试参数仅限本地测试使用。生产环境请勿暴露此参数防止被恶意刷爆目标站。5.2 CSS 不生效验证 MIME 类型与路径引用若页面文字无样式、布局错乱90% 是 CSS 文件未加载。检查三点检查项正确值错误表现index.asp中link relstylesheet href/css/main.css的href路径必须以/开头绝对路径若写css/main.cssIIS 会尝试从虚拟目录根找而非当前应用IIS 中/css/目录的 MIME 类型.css→text/css若为application/octet-stream浏览器拒绝解析main.css文件编码UTF-8 无 BOM含 BOM 会导致 IE 下 CSS 规则失效表现为media查询不触发验证方法直接访问http://localhost/news/css/main.css应看到纯 CSS 代码若下载文件或报 404说明路径或 MIME 配置错误。5.3 时间显示为NaN修正FormatDate函数中的正则捕获组index.asp第 215 行FormatDate(str)函数将2022-03-15或2022年3月15日统一转为2022-03-15。若某站返回Mar 15, 2022原函数会因正则不匹配返回NaN。修复方法扩展正则支持英文月份缩写 在 FormatDate 函数开头添加 If str Like Jan*#### Or str Like Feb*#### Or str Like Mar*#### Then 使用数组映射arrMonth Array(Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec) 提取 Mar 15, 2022 中的 Mar/15/2022再查表转数字 monthName Trim(Split(str, )(0)) day CInt(Trim(Split(Split(str, )(1), ,)(0))) year CInt(Split(str, )(2)) For i 0 To 11 If LCase(monthName) LCase(arrMonth(i)) Then monthNum i 1 Exit For End If Next FormatDate year - Right(0 monthNum, 2) - Right(0 day, 2) Exit Function End If此补丁使爬虫兼容英文新闻源无需修改news_sources配置体现 v2.1.1 的健壮性升级。本文还有配套的精品资源点击获取
返回列表