网页解析:如何获得网页源码中嵌套的标签。
一:前言:网页源码中有很多嵌套的标签
例如div标签嵌套如:bUTP<DIV>finally<div>aurora</div>@126.com</div><div class=\"Cited1\">ggff</div>
我们的网页解析工作中有时候需要解嵌套。通俗的讲就是把嵌套的标签以线性表的形式表示出来。还拿上面的例子来说明。即解嵌套为
<div>aurora</div>
<DIV>finally<div>aurora</div>@126.com</div>
div class=\"Cited1\">ggff</div>
核心代码如下:
class ThemeIRAssist
{
public static void GetNodesByTags( ref string rawtext,string tags,ref List<string>result )
{ //储存开始标签的位置
List<Position > beginTagPos = new List<Position >();
//储存结束标签的位置
List<Position> endTagPos = new List<Position>();
//匹配开始标签的正则表达式
string sBeginTagPattern = "<" + tags;
Regex regexBeginTag = new Regex(sBeginTagPattern, RegexOptions.IgnoreCase | RegexOptions.Singleline);
//匹配结束标签的正则表达式。
string sEndTagPattern = "</" + tags + ">";
Regex regexEndTag = new Regex(sEndTagPattern, RegexOptions.Singleline | RegexOptions.IgnoreCase);
//获得开始标签的集合
MatchCollection beginTagCollection = regexBeginTag.Matches(rawtext);
//获得结束标签的集合
MatchCollection endTagCollection = regexEndTag.Matches(rawtext);
foreach (Match mymatch in beginTagCollection)
{
Position pos=new Position();
pos.nPos=mymatch.Index;
pos.VistStatus=false;
beginTagPos.Add(pos);
}
foreach (Match mymatch in endTagCollection)
{
Position pos = new Position();
pos.nPos = mymatch.Index;
pos.VistStatus = false;
endTagPos.Add(pos);
}
for (int i = 0; i < endTagPos.Count; i++)
{
for (int j = beginTagPos.Count - 1; j >= 0; j--)
{
if(endTagPos[i].nPos<beginTagPos[j].nPos)
continue;
else
{
if (beginTagPos[j].VistStatus)
continue;
else
{
result.Add(rawtext.Substring(beginTagPos[j].nPos,endTagPos[i].nPos-beginTagPos[j].nPos+6));
beginTagPos[j].VistStatus=true;
break;
}
}
}
}
}
}
class Position
{
private int pos;
private bool visited;
public int nPos
{
get { return pos; }
set { pos = value; }
}
public bool VistStatus
{
get { return visited; }
set { visited = value; }
}
}
Main函数测试如下:
static void Main(string[] args)
{
StreamReader sr = new StreamReader("D:\\finally.txt", Encoding.GetEncoding("utf-8"));
string rawtext = sr.ReadToEnd();
// string rawtext = "bUTP<DIV>finally<div>aurora</div>@126.com</div><div class=\"Cited1\">ggff</div>";
List<string> result = new List<string>();
ThemeIRAssist.GetNodesByTags(ref rawtext, "div", ref result);
Console.WriteLine(result.Count);
Regex regexStadard = new Regex(@"^<div\s+class=""Cited1""", RegexOptions.IgnoreCase | RegexOptions.Singleline);
for (int i = result.Count - 1; i >= 0; i--)
{
if(!regexStadard.IsMatch(result[i]))
result.RemoveAt(i);
}
Console.WriteLine(result.Count);
foreach(string s in result)
{
Console.WriteLine("***************************************************");
Console.Write(s);
Console.WriteLine("***************************************************");
}
Console.Read();
}
网页解析:如何获得网页源码中嵌套的标签。相关推荐
- 易语言 网页_取文本_reg的源码
.版本 2.子程序 网页_取文本_reg, 文本型, 公开, 去掉网页源码中的HTML标签,保留纯文本(正则方式) .参数 网页源码, 文本型, , 网页源码如果含中文且乱码的,请先解码 .局部变量 ...
- 1.网页源码中找到我们需要获取
一.需求分析 二.页面分析 我们需要在网页源码中找到我们需要获取的信息.所有我们在刷新页面后出现的3个XHR下需找我们需要的信息. 依次点开找到最后一个包如图. 打开任意一个列表(这里不确定是不是列表 ...
- 国际网页短信后台定制源码搭建软件平台定制-移讯云短信系统
国际网页短信后台定制源码搭建软件平台定制-移讯云短信系统 短信服务端号码通道分类功能 短信后开发按照要求有个功能是发送分流.就是当短信客户端提交过来的短信号码包含移动.联通.电信时,系统要实现不通类型 ...
- java毕业设计网页小游戏交流论坛源码+lw文档+mybatis+系统+mysql数据库+调试
java毕业设计网页小游戏交流论坛源码+lw文档+mybatis+系统+mysql数据库+调试 java毕业设计网页小游戏交流论坛源码+lw文档+mybatis+系统+mysql数据库+调试 本源码技 ...
- JDK源码解析 迭代器模式在JAVA的很多集合类中被广泛应用,接下来看看JAVA源码中是如何使用迭代器模式的。
JDK源码解析 迭代器模式在JAVA的很多集合类中被广泛应用,接下来看看JAVA源码中是如何使用迭代器模式的. 看完这段代码是不是很熟悉,与我们上面代码基本类似.单列集合都使用到了迭代器,我们以Arr ...
- japidocs怎么设置参数必填_JApiDocs 动态生成接口文档,并解析java 源码中的注释...
1.介绍 JApiDocs 是一个符合 Java 编程习惯的 Api 文档生成工具.最大程度地利用 Java 的语法特性,你只管用心设计好接口,添加必要的注释,JApiDocs 会帮你导出一份漂亮的 ...
- Git之深入解析如何使用Git调试项目源码中的问题
一.前言 了解了管理或者维护 Git 仓库.实现代码控制所需的大多数日常命令和工作流程,尝试跟了踪和提交文件的基本操作,并且掌握了暂存区和轻量级地分支及合并的威力.如果想进一步对 Git 深入学习,可 ...
- 什么是php的ast结构,什么是AST?Vue源码中AST语法树的解析
这篇文章给大家介绍的内容是关于什么是AST?Vue源码中AST语法树的解析,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 什么是AST AST是指抽象语法树(abstract syn ...
- html5游戏开发 网页版-捕鱼达人游戏源码下载
html5游戏开发 网页版-捕鱼达人游戏源码下载 来玩一把! 转载于:https://www.cnblogs.com/jsfoot/p/3215371.html
最新文章
- 华为深度学习新模型DeepShift:移位和求反代替乘法,成本大降
- 推荐TensorFlow2.0的样例代码下载
- 使用Myelipse逆向生成类图的步骤
- Python(60)_闭包
- SharePoint 2010 Crawl Component Stuck in “Recovering” status
- Java实现创建二维码操作
- php 获取顶级域名、一级域名
- 使用DPM2007来保护企业数据
- 话单分析 之 含小数保留9位
- Android源码在线查看工具
- delphi 剪切板变量_delphi clipbrd剪贴板的读写和清除功能
- 苹果旧版app_苹果手机教你安装旧版app
- 国际贸易术语解释通则(DDU 未完税交货(……指定目的港))
- linux 终端 reboot,讲解Linux基础命令之:man、reboot
- Android应用内安装apk包
- python str转bool方法
- Jackknife,Bootstraping, bagging, boosting, AdaBoosting, Rand forest 和 gradient boosting的简单介绍
- 数字硅麦数据的处理(傅里叶FFT)
- Google Chrome浏览器调整分辨率的插件
- 调取大华SDK获取IPC音视频流并得到H264帧