分析html格式数据,根据正则表达式获取所需数据,并存入数据库

例子为获取<dl>中的<dt></dt><dd></dd>中的内容,由于在<dt></dt>标签中还存在<a>标签,所有会一同举例说明。第一次做不够优化,共同学习。

<!DOCTYPE html>

<html>

<head>

  <title><title>

</head>

<body>

  <dl class="hello">

    <dt> <a href="sdf">小哈同学1号的日记,2017-2-26日</a> </dt>
    <dd> 记录人:小哈同学1号 </dd>
    <dd> 天气:晴 </dd>
    <dd> 心情:<a href="fdg">今天外面有出太阳,可还是很冷,心情还不错!</a></dd>
  </dl>

  <dl class="hello">

    <dt> <a href="sdf">小哈同学2号的日记,2017-2-26日</a> </dt>
    <dd> 记录人:小哈同学2号 </dd>
    <dd> 天气:晴 </dd>
    <dd> 心情:<a href="fdg">是晴天,心情很好!</a></dd>
  </dl>

</body>

</html>

第一步:首先这边将html以字符串的格式存入了数据库中(可以不存,可上传后获取整个文件分析)

string json="上方的html";

第二步:通过正则表达式获取 <dl class="hello">内容

MatchCollection medl = Regex.Matches(json, @"<dl class=""hello"">([\s\S]*?)</dl>");//这里的json传的是需分析的字符串

List<string> mclist = new List<string>();//用于存储最后遍历出来的实体数据
//循环dl
for (int i = 0; i < medl.Count; i++)
{

  第三步:获取<dl>下<a>标签中的内容
  //获取dl下的dt下的a标签
  MatchCollection dedt = Regex.Matches(medl[i].Value, @"(?<=>).*(?=</a>)");

  List<string> titlelist = new List<string>();
  foreach (var item in dedt[0].Value.Split(‘,‘))//<dt><a>标签中包含两个内容,日记标题和日期,这里通过split分割将值遍历出来
  {
    titlelist.Add(item);
  }
  for (int b = 0; b < titlelist.Count; b++)
  {
    if (b == 0)
    {
      mclist.Insert(0, "日记标题:" + titlelist[b]);
      mclist.Insert(1, "心情:" + dedt[1].Value);//第二个<a>标签的值
    }
    else if (b == 1)
    {
      mclist.Insert(2, "日期:" + titlelist[b]);
    }
    else
    {
    }
  }

  第四步:获取<dl>下的<dd>标签里面的内容
  //获取dl下的dd标签
  MatchCollection mcdd = Regex.Matches(medl[i].Value, @"(?<=<dd>)([^<]*)(?=</dd>)");
  //循环dd标签
  for (int j = 0; j < mcdd.Count; j++)
  {
    mclist.Add(mcdd[j].Value);//将dd标签获取的值存入mclist中(如果这时存入的值有多余的转义字符可用Value.replace("需替换的值","替换后的值")替换)
  }
  hellobll.Add(GetModels(mclist));//将mclist中的数据存入数据库
  //将mclist中存入数据库的数据移除,防止重复操作
  mclist.Clear();

 }

//该方法将数据对应的数据字段中,在this.GetValueByKey方法中拿到相应的值。

private Model.hello GetModels(List<string> data)
{
Model.hello model = new Model.hello ();
model.Title= this.GetValueByKey(data, "日记标题");//日记标题

model.date= this.GetValueByKey(data, "日期");//日期
model.Name = this.GetValueByKey(data, "记录人");//记录人
model.Weather = this.GetValueByKey(data, "天气");//天气

model.Mood = this.GetValueByKey(data, "心情");//心情

return model;
}


private string GetValueByKey(List<string> data, string key)
{
string result = data.Find(x => x.StartsWith(key));
if (!string.IsNullOrEmpty(result))
{
result = result.Replace(key, string.Empty);
result = result.Replace(":", "");
result = result.Trim();
}
return result;
}

//实体类

public class Diary

{

  Public int ID{get;set;}

  public string Title{get;set;}

  public string Name{get;set;}

  public string date{get;set;]//这里时间存的是string类型

  public string Weather{get;set;}

  public string Mood{get;set;}

}

正则表达式可优化,心情这条数据没有通过<dd>标签获取,是通过<a>标签获取的。

时间: 02-24

分析html格式数据,根据正则表达式获取所需数据,并存入数据库的相关文章

C#中,使用正式表达式匹配获取所需数据

.NET中,使用正式表达式匹配获取所需数据 需求:获取一串字符串中,正则匹配出需要的数据. 例如以下字符串: string temp ="ErrorCode:-1,Message:{"UserId" : "1000","userName" : "ZhangSan"}"; 我需要获得“-1”和“{"UserId" : "1000","userName"

读取文件信息,并通过sscanf从中获取所需数据

#include <stdio.h> #include <stdlib.h> #include <string.h> int file_length(char* fileName) { FILE* fp; int file_set_val,file_end_val; fp = fopen(fileName, "r"); if(fp == NULL) { printf("[%s][%s]read file fail\r\n",__L

zTree实现获取一级节点数据

1.实现源码 <!DOCTYPE html> <html> <head> <title>zTree实现基本树</title> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <link rel="stylesheet" type="text/css" href=&

数据中台:宜信敏捷数据中台建设实践|分享实录

内容来源:宜信技术学院第2期技术沙龙-线上直播|宜信敏捷数据中台建设实践 分享嘉宾:宜信数据中台平台团队负责人 卢山巍 导读:宜信于2017年推出了一系列大数据开源工具,包括大家熟悉的DBus.Wormhole.Moonbox.Davinci等,在技术社区内得到了广泛关注和好评.这些工具是如何在宜信内部应用的?它们和宜信数据中台是怎样的关系?又是如何驱动各种日常数据业务场景的? 本次分享对这些问题进行了回答,同时重点分享了宜信敏捷数据中台的设计.架构以及应用场景,提出一种敏捷数据中台的建设思路,

Jmeter之正则表达式提取获取数组类型数据

前言 在之前,我们已经学会了Jmeter正则表达式提取器提取某个数据,还没掌握的小伙伴可以翻看我之前写的随笔Jmeter之正则表达式提取器,今天我们来学习一下怎么利用正则表达式提取器获取数组类型的数据,多用于列表信息数据的获取. 一:添加唯品会商城http请求,我们要提取的是商城的商品类型 二:添加后置处理器-正则表达式提取器,引用名称为menu-title 三:添加取样器-Debug Sampler,查看是否获取到数组类型的数据 原文地址:https://www.cnblogs.com/zha

iOS开发——网络使用技术OC篇&amp;网络爬虫-使用正则表达式抓取网络数据

网络爬虫-使用正则表达式抓取网络数据 关于网络数据抓取不仅仅在iOS开发中有,其他开发中也有,也叫网络爬虫,大致分为两种方式实现 1:正则表达 2:利用其他语言的工具包:java/Python 先来看看网络爬虫的基本原理: 一个通用的网络爬虫的框架如图所示: 网络爬虫的基本工作流程如下: 1.首先选取一部分精心挑选的种子URL: 2.将这些URL放入待抓取URL队列: 3.从待抓取URL队列中取出待抓取在URL,解析DNS,并且得到主机的ip,并将URL对应的网页下载下来,存储进已下载网页库中.

OC利用正则表达式获取网络资源(网络爬虫)

在开发项目的过程,很多情况下我们需要利用互联网上的一些数据,在这种情况下,我们可能要写一个爬虫来爬我们所需要的数据.一般情况下都是利用正则表达式来匹配Html,获取我们所需要的数据.一般情况下分以下三步:1.获取网页的html2.利用正则表达式,获取我们所需要的数据3.分析,使用获取到的数据,(例如,保存到数据库) 接下来我们分析代码:1.获取网页的html 对于一些网页,不需要提交Post提交数据时,我们可以简单的利用NSURL类来获取我们所需要的html,交将其转换中kCFStringEnc

在ASP中用“正则表达式对象”来校验数据的合法性

我们在制作网站的时候,尤其是各种电子商务网站,首先都会让用户填写一些表格来获取注册用户的各种信息,因为用户有可能输入各式各样的信息,而有些不符合要求的数据会给我们的后端ASP处理程序带来不必要的麻烦,甚至导致网站出现一些安全问题.因此我们在将这些信息保存到网站的数据库之前,要对这些用户所输入的信息进行数据的合法性校验,以便后面的程序可以安全顺利的执行.所以我们一般会在后端编写一个ASP的校验程序来分析用户输入的数据是否是合法的. 或许有人会问了,使用运行在客户端的JavaScript不是可以更好

使用Socket通信实现Silverlight客户端实时数据的获取(模拟GPS数据,地图实时位置)

原文:使用Socket通信实现Silverlight客户端实时数据的获取(模拟GPS数据,地图实时位置) 在上一篇中说到了Silverlight下的Socket通信,在最后的时候说到本篇将会结合地图.下面就来看看本文实现的功能: Silverlight 与服务器利用Socket通讯,实时从服务器获取数据(本文中的数据是地理坐标),由于没有GPS,所以本文在服务器写了一个构造新坐标的函数(本文是一个三角函数),然后利用Timer组件,实时调用,得到新的坐标,并将新的坐标发送给客户端,客户端接收到发