网页信息抓取 写了一个从网页中抓取信息如最新的头条新闻新闻的来源标题内容等的类本文将介绍如何使用这个类来抓取网页中需要的信息。本文将以抓取博客园首页的博客标题和链接为例上图显示的是博客园首页的DOM树显然只需提取出class为post_item的div再重中提取出class为titlelnk的a标志即可。这样的功能可以通过以下函数来实现/// summary /// 在文本html的文本查找标志名为tagName,并且属性attrName的值为attrValue的所有标志 /// 例如FindTagByAttr(html, div, class, demo) /// 返回所有class为demo的div标志 /// 前端学习交流QQ群461593224/// /summary public static ListHtmlTag FindTagByAttr(String html, String tagName, String attrName, String attrValue) { String format String.Format({0}\s[^]*{1}\s*\s*(\x27|\x22){2}(\x27|\x22)[^]*, tagName, attrName, attrValue); return FindTag(html, tagName, format); } public static ListHtmlTag FindTag(String html, String name, String format) { Regex reg new Regex(format, RegexOptions.IgnoreCase); Regex tagReg new Regex(String.Format((\/|)({0})(\s[^]*|), name), RegexOptions.IgnoreCase); ListHtmlTag tags new ListHtmlTag(); int start 0; while (true) { Match match reg.Match(html, start); if (match.Success) { start match.Index match.Length; Match tagMatch null; int beginTagCount 1; while (true) { tagMatch tagReg.Match(html, start); if (!tagMatch.Success) { tagMatch null; break; } start tagMatch.Index tagMatch.Length; if (tagMatch.Groups[1].Value /) beginTagCount--; else beginTagCount ; if (beginTagCount 0) break; } if (tagMatch ! null) { HtmlTag tag new HtmlTag(name, match.Value, html.Substring(match.Index match.Length, tagMatch.Index - match.Index - match.Length)); tags.Add(tag); } else { break; } } else { break; } } return tags; }有了以上函数就可以提取需要的HTML标志了要实现抓取还需要一个下载网页的函数public static String GetHtml(string url) { try { HttpWebRequest req HttpWebRequest.Create(url) as HttpWebRequest; req.Timeout 30 * 1000; HttpWebResponse response req.GetResponse() as HttpWebResponse; Stream stream response.GetResponseStream(); MemoryStream buffer new MemoryStream(); Byte[] temp new Byte[4096]; int count 0; while ((count stream.Read(temp, 0, 4096)) 0) { buffer.Write(temp, 0, count); } return Encoding.GetEncoding(response.CharacterSet).GetString(buffer.GetBuffer()); } catch { return String.Empty; } }/// 前端学习交流QQ群461593224以下以抓取博客园首页的文章标题和链接为例介绍如何使用HtmlTag类来抓取网页信息class Program { static void Main(string[] args) { String html HtmlTag.GetHtml(http://www.cnblogs.com); ListHtmlTag tags HtmlTag.FindTagByAttr(html, div, id, post_list); if (tags.Count 0) { ListHtmlTag item_tags tags[0].FindTagByAttr(div, class, post_item); foreach (HtmlTag item_tag in item_tags) { ListHtmlTag a_tags item_tag.FindTagByAttr(a, class, titlelnk); if (a_tags.Count 0) { Console.WriteLine(标题:{0}, a_tags[0].InnerHTML); Console.WriteLine(链接:{0}, a_tags[0].GetAttribute(href)); Console.WriteLine(); } } } } }运行结果如下欢迎学习前端的同学一起学习前端学习交流QQ群461593224

相关新闻

最新新闻

TEdit地图编辑器:5个核心功能让泰拉瑞亚地图创作更简单

TEdit地图编辑器:5个核心功能让泰拉瑞亚地图创作更简单

TEdit地图编辑器:5个核心功能让泰拉瑞亚地图创作更简单 【免费下载链接】Terraria-Map-Editor TEdit - Terraria Map Editor - TEdit is a stand alone, open source map editor for Terraria. It lets you edit maps just like (almost) paint! It also lets you c…

2026/7/28 16:01:53
Shell编程规范与变量使用最佳实践

Shell编程规范与变量使用最佳实践

1. Shell编程规范与变量概述在Linux/Unix系统管理中,Shell脚本就像瑞士军刀一样不可或缺。我见过太多因为不规范脚本导致的灾难:某次线上事故仅仅因为变量名冲突就让整个日志分析系统瘫痪了8小时。规范的Shell编程不仅能避免这类问题,还能让你…

2026/7/28 16:01:53
AI写作工具在学术开题报告与论文降重中的实战评测

AI写作工具在学术开题报告与论文降重中的实战评测

1. 项目背景与需求解析作为一名在学术写作领域摸爬滚打多年的老手,我深知开题报告和论文降重这两个环节有多折磨人。记得读研时,光是开题报告的文献综述部分就让我熬了三个通宵,而查重阶段更是一场噩梦——明明是自己写的句子,系统…

2026/7/28 16:01:53
vue.js介绍及vue.js优缺点

vue.js介绍及vue.js优缺点

1. 什么是vue Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式框架。与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整合。另一方…

2026/7/28 16:01:53
格式化字符串漏洞:从内存泄露到GOT覆写的PWN入门实战

格式化字符串漏洞:从内存泄露到GOT覆写的PWN入门实战

1. 项目概述:为什么格式化字符串漏洞是PWN入门的“必修课”? 如果你刚开始接触CTF中的PWN方向,面对一堆反汇编代码和内存地址可能会感到无从下手。那么,“格式化字符串漏洞”绝对是你绕不开的第一个实战型知识点。它不像栈溢出那样…

2026/7/28 16:01:53
JAVA毕设项目: 基于 SpringBoot+Vue 的动物公益救助系统校园流浪动物救助记录与数据统计平台 (源码+文档,讲解、调试运行,定制等)

JAVA毕设项目: 基于 SpringBoot+Vue 的动物公益救助系统校园流浪动物救助记录与数据统计平台 (源码+文档,讲解、调试运行,定制等)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026/7/28 15:56:53

月新闻