获取网页指定内容,终于不用正则表达式.

刚设计一个获取网页内中草药资料提取的软件,原想找些正则表达式来达到获取文字资料,试找了些,都是获取链接和链接文字的,还有获取TD间文字的没试过,不过对照获取到的网页内容可见效果不很满意,于是自己对网页内容进行分析,经过2天的努力,终于不用正则表达式,获取到想要的纯文字资料,下面是使用语句获取的一个网页内容:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GB2312">
<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7">
<title>玄参 - 中药查询</title>
<meta name="Keywords" content="玄参,玄参的功效与作用">
<meta name="Description" content="玄参,多年生草本,根肥大,圆柱形,下部常分枝,外皮灰褐色。喜生于湿润土壤中。于10~11月挖取根部,晒干。玄参的功效与作用:凉血滋阴、泻火解毒。 ">
<link href="/img/css/39base.css" rel="stylesheet" type="text/css">
<link href="/img/css/jbk_nav12_2.css" rel="stylesheet" type="text/css">
<link href="/img/css/jbk_style.css" rel="stylesheet" type="text/css">
<link rel="stylesheet" type="text/css" href="/img/css/jbk201210.css" media="all">
<link href="/img/css/index_style201012.css" rel="stylesheet" type="text/css">
<script src="/img/js/jquery-1.js" type="text/javascript"></script>
<script type="text/javascript" language="javascript" src="/img/js/common.js"></script>
<script type="text/javascript" language="javascript" src="/img/js/jquery-1.js"></script>
<script language="javascript" type="text/javascript" src="http://www.zhongyoo.com/img/js/toptongji.js"></script>
<link href="/img/css/on_new.css" type="text/css" rel="stylesheet">
</head>

我想要的内容是从【<strong>中药名</strong>】到【<strong>相关药方</strong>】这些内容,而这些内容中还包含了不想要的字符,首先我想到的是如何删除<>之间的内容,于是写了一个处理函数:

        string 删除单字符区间(string 数据, string 分隔符)
        {
            int 寻 = 0, 找 =  0;
            while (true)
            {
                寻 = 数据.IndexOf(分隔符[0]);
                找 = 数据.IndexOf(分隔符[1]);
                if (寻 < 0) break;
                if (寻 > 找) 数据 = 数据.Remove(找, 1);
                else 数据 = 数据.Remove(寻, (找 - 寻) + 1);
            }
            return 数据;
        }

得到了如下处理的内容:


  【中药名】玄参 xuanshen

  【别名】元参、北玄参、黑参、山当归。

  【英文名】Scrophulariae Radix。

  【来源】玄参科植物北玄参Scrophularia buergeriana Miq. (S. oldhamiOliv.)的根。

  【植物形态】多年生草本,高60~120厘米。根肥大,圆柱形,下部常分枝,外皮灰褐色。茎直立,四棱形,有沟纹。下部的叶对生,上部的叶有时互生,均具柄,叶片卵形至长卵形,长5~12厘米,宽3.5~12厘米,先端尖,基部圆形或近截形,边缘具细锯齿。聚伞花序总花序紧缩成穗状,花序轴及花梗均被腺毛,花萼长2~3毫米,5裂几达基部,裂片近圆形,边缘膜质,花冠黄绿色,管部斜壶状,能育雄蕊4枚,退化雄蕊1枚,近圆形,贴生在花冠管上,子房上位,2室。蒴果卵形,长约6毫米。

  【产地分布】喜生于湿润土壤中。分布于黑龙江、吉林、辽宁、河北、内蒙古等地。

  【采收加工】于10~11月挖取根部,除去茎叶及泥土,剥脱子芽供留种栽培用,根部晒至半干且内部色变黑时,剪去芦头及须根,堆放3~4天(发汗)后,晒干或烘干。

  【药材性状】圆柱形,中部略粗或上粗下细,有的微弯似羊角,长6~20厘米,宽1~3厘米。表面灰褐色,有纵皱纹,有细根及细根痕。质坚实,难折断,断面略平坦,色黑,微有光泽。有焦糖气,味甘、微苦,以水浸泡,水呈黑色。以条粗壮、质坚实、断面色黑者为佳。

  【性味归经】性微寒,味甘、苦、咸。归肺经、胃经、肾经。

  【功效与作用】凉血滋阴、泻火解毒。属清热药下分类的清热凉血药。

  【临床应用】用量9~15克,内服煎汤,或入丸散,治疗热病伤阴、舌降烦渴、温毒发斑、津伤便秘、骨蒸劳嗽、目赤、咽痛、瘰疬、白喉、痈肿疮毒、高血压。外用捣敷或研末调敷。治咽喉连舌肿痛:玄参、射干、黄药各15克,水煎服。

  【药理研究】北玄参水浸、醇浸液灌服或注射给正常(猫、犬、兔)及肾型高血压犬均有降压作用,醇浸膏还能抗缺氧、抗心肌缺血、增加心肌营血量;水浸液对离体豚鼠支气管有明显的舒张作用,并能加强肾上腺素的作用。毒性:小鼠腹腔注射水煎剂的LD50为15.99~19.91克/千克。另具有解热、抗菌、保护心肌缺血、解痉、降血压、降血糖等作用。

  【主要成分】根中含哈巴苷(70%~80%)、8-邻甲基对香豆酰、哈巴苷,均系变黑的物质。另含哈巴俄苷、玄参三酯苷、玄参种苷、桃叶珊瑚苷、玄参环醚、京尼平苷、赛斯坦苷F、去咖啡酰毛蕊花糖苷、毛蕊花苷等。

  【使用禁忌】脾虚便溏或脾胃有湿者禁服。不宜与藜芦同用。

  【相关药方】①治口舌生疮,久不愈:玄参、天门冬(去心、焙)、麦门冬(去心、焙)各30克。捣罗为末,炼蜜和丸,如弹子大。每以绵裹一丸,含化咽津。(《圣济总录》玄参丸)

  ②治鼻中生疮:用玄参,水渍软,塞鼻中,或为末涤之。(《卫生易简方》)

  ③治夜卧口渴喉干:玄参二片含口中,即生津液。(《吉人集验方》)

  ④治气虚血壅,小便赤浊,似血非血,似溺非溺,溺管疼痛:玄参、车前子各30克,水煎服。(《辨证录》玄车丹)

  ⑤治因阴阳偏,火有余而水不足,遇事或多言则心烦,常感胸中扰壤,纷纭而嘈杂:玄参、麦冬各60克,水煎服。(《辨证录》玄冬汤)



show_view_04();





最近更新时间:2016-04-19




show_view_03();



中药常见偏方
更多相关文章  
。。。。。。
中药 | 网站地图 | 中药材名称大全 | 设为首页 | 加入收藏
Copyright &#169; 2016 www.zhongyoo.com All Rights Reserved. 中药查询 京ICP备13004469号-1 
window._bd_share_config={"common":{"bdSnsKey":{},"bdText":"","bdMini":"2","bdMiniList":false,"bdPic":"","bdStyle":"0","bdSize":"24"},"share":{}};with(document)0[(getElementsByTagName('head')[0]||body).appendChild(createElement('script')).src='http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion='+~(-new Date()/36e5)];


然而还有一些不想要的内容该如何去除?使用【】作为分隔符获取数组是可以做到的,然而在查看获得的数组内容后会发现有些不需要的内容:

由于网页内容千差万别,对多余文字的处理也就不同,如何才能做到完美?经过2天对获取到的网页内容进行分析,得到只要获取<p></p>之间内容就是我需要的,如果能用多字符作为分隔符就可以获得想要的数据了,为此,修改上面函数为获取与删除双重功能:

        string 删除单字符区间(string 数据, string 分隔符, string[] 获取多字符区间)
        {
            int 寻 = 0, 找 =  0;
            数据 = string.Join("\r\n", 数据.Split(获取多字符区间, StringSplitOptions.RemoveEmptyEntries).Skip(1).Reverse().Skip(1).Reverse());
            while (true)
            {
                寻 = 数据.IndexOf(分隔符[0]);
                找 = 数据.IndexOf(分隔符[1]);
                if (寻 < 0) break;
                if (寻 > 找) 数据 = 数据.Remove(找, 1);
                else 数据 = 数据.Remove(寻, (找 - 寻) + 1);
            }
            return 数据;
        }

这样处理后就获得了我想要的纯净数据了:

如此的完美,兴奋之余,想以最快的速度分享出来。

这样以后想要获取网页内容就方便了,只要找到想要的和不想要的内容,按理来说都是可以任意获取的了。

        string 删除单字符区间(string 数据, string 分隔符, string[] 获取多字符区间)
        {
            int 寻 = 0, 找 =  0;
            数据 = string.Join("\r\n", 数据.Split(获取多字符区间, StringSplitOptions.RemoveEmptyEntries).Skip(1).Reverse().Skip(1).Reverse());
            while (true)
            {
                寻 = 数据.IndexOf(分隔符[0]);
                找 = 数据.IndexOf(分隔符[1]);
                if (寻 < 0) break;
                数据 = (寻 > 找) ? 数据.Remove(找, 1) : 数据.Remove(寻, (找 - 寻) + 1);
            }
            return 数据;
        }

在这次编程中还写了把字符串转为字符串数组和检查数据表数据是否存在,存在就不添加数据的功能,稍后分享。

目前软件界面预览,下一步要做成爬虫那样自动获取链接集合,自动推断获取数据的功能.

 

        /// <summary>删除单字符区间:删除以一个单字符包含的区间所有内容。</summary>
        /// <param name="数据">要删除以一个单字符包含的区间所有内容的字符串。</param>
        /// <param name="单分割符">默认单字符包含的区间,也可自定义以两个单字符所包含的区间,同时删除分割符自身的字符。</param>
        /// <returns></returns>
        string 删除单字符区间(string 数据, string 单分割符 = "<>")
        {
            int 头 = 0, 尾 = 0;
            if (单分割符 != "")
            {
                foreach (char 符 in 单分割符.Remove(单分割符.Length - 1, 1))
                    while (单分割符.Contains(符))
                    {
                        数据 = 数据.Replace("\n", "").Replace("\r", "");
                        if ((头 = 尾 = 数据.IndexOf(符)) < 0) break;
                        while (数据.Length > 尾 && 数据[尾] != 单分割符[单分割符.IndexOf(符) + 1]) ++尾;
                        if (数据.Length <= 尾) break;
                        if (头 < 尾) 数据 = 数据.Remove(头, (尾 - 头) + 1);
                    }
                foreach (char 替换 in 单分割符) 数据 = 数据.Replace(替换.ToString(), "");
            }
            return 数据;
        }

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值