最近做了一个项目,要求获取各大主流网页上的关键信息,本人以前了解过网页爬虫的知识,所以想到了网页爬虫了实现功能

第一次尝试:

采用webclient获取远程网页的内容,然后采用正则表达式进行过滤

但,由于正则表达式对我来说,书写起来比较复杂,研究个大半个月,一点进展都没有,每天看着正则表达式像看天书(回头需要向正则牛逼的人请教一下)

第一次尝试失败,项目马上就要验收了,这个功能一直卡壳了,,,,,,,,

突然有一次,在网上看到了有人提及到了HtmlAgilityPack这个开源的工具包,本想着试一下的态度(因为我对这个网页解析已经不抱有希望了)

仅仅有了几行的代码,居然跟我的需求一样实现了,万分高兴(此处使用HtmlAgilityPack需要学习一下xpath的一点知识,不过那些都很简单,比起正则太easy了)

好了,废话不多说,上代码

1、去官网上下载一个HtmlAgilityPack包,地址:http://htmlagilitypack.codeplex.com/

2、根据自己项目的.net版本,选择适合的版本,引入项目

3、开始写代码了

HtmlAgilityPack基本跟所有的类一样,直接使用里面的方法和属性就行,具体可以参考官网

//获取网页指定内容
public void GetHtml()
{
string htmlpath = "http://kaijiang.aicai.com/fcssq/";
//创建对象
HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
WebClient webclient = new WebClient();
webclient.Credentials = CredentialCache.DefaultCredentials;//网络凭证
Byte[] pageData = webclient.DownloadData(htmlpath);
// string pagehtml = Encoding.Default.GetString(pageData); //默认编码
string pagehtml = Encoding.UTF8.GetString(pageData);//UTF-8编码 //用htmlagilitypack 解析网页内容 //加载html
doc.LoadHtml(pagehtml); //通过xpath 选中指定元素;xpath 参考:http://www.w3school.com.cn/xpath/xpath_syntax.asp
HtmlAgilityPack.HtmlNode htmlnode = doc.DocumentNode.SelectSingleNode("//div[@id='jq_openResult']");
StringBuilder sb = new StringBuilder();
string s = ""; HtmlAgilityPack.HtmlNodeCollection nodecollection = htmlnode.ChildNodes;
for (int i = 0; i < nodecollection.Count; i++)
{
if (nodecollection[i].InnerText.Trim()!="")
{
TextBox1.Text += nodecollection[i].InnerText + "-"; }
}
TextBox1.Text = TextBox1.Text.Substring(0, TextBox1.Text.Length - 1);
Console.WriteLine(s); }

至此,HtmlAgilityPack就完全按照自己的要求解析出来了网页上的任何你想要的,是不是很神奇~~

浅谈C#解析网页的更多相关文章

  1. 浅谈浏览器解析 URL+DNS 域名解析+TCP 三次握手与四次挥手+浏览器渲染页面

    (1)浏览器解析 URL 为了能让我们的知识层面看起来更有深度,我们应该考虑下面两个问题了: 从浏览器输入 URL 到渲染成功的过程中,究竟发生了什么? 浏览器渲染过程中,发生了什么,是不是也有重绘与 ...

  2. 浅谈抓取网页数据(奉上Demo)

    Demo源码 背景 曾经在公司做过一个比价系统,就是抓取其它网站上商品的价格并和自己公司的商品进行对应,然后展示出来,给pm提供一个定价的参考.后来,有同事的朋友在找工作的时候,猎头让其做一个抓取去哪 ...

  3. 浅谈optparse 解析命令行参数库

    使用的背景 在工作中我们经常要制定运行脚本的一些参数,因为有些东西是随着我么需求要改变的,所以在为们写程序的时候就一定不能把写死,这样我们就要设置参数 在python中我们可以通过sys 模板的arg ...

  4. 浅谈JSONObject解析JSON数据

    我们在做jmeter接口测试时能会用beanshell断言,一般都会将返回值转成JSONObject对象进行处理.本文选取较为复杂json格式数据,也将适用于java接口测试. JSON数据 { &q ...

  5. 不会SQL也能做数据分析?浅谈语义解析领域的机会与挑战

    笔者按: 在第5次AI TIME PhD Debate上,笔者邀请了部分国内外语义解析领域的杰出华人学者共话语义解析的过去,现状和未来.本博客为笔者根据视频讨论总结的干货整理.对原视频感兴趣的同学可以 ...

  6. 浅谈html5网页内嵌视频

    更好的阅读体验:浅谈html5网页内嵌视频 如今在这个特殊的时代下:flash将死未死,微软和IE的历史问题,html5标准未定,苹果和谷歌的闭源和开源之争,移动互联网的大势所趋,浏览器各自为战... ...

  7. 浅谈 Java 主流开源类库解析 XML

    在大型项目编码推进中,涉及到 XML 解析问题时,大多数程序员都不太会选用底层的解析方式直接编码. 主要存在编码复杂性.难扩展.难复用....,但如果你是 super 程序员或是一个人的项目,也不妨一 ...

  8. 浅谈php生成静态页面

    一.引 言 在速度上,静态页面要比动态页面的比方php快很多,这是毫无疑问的,但是由于静态页面的灵活性较差,如果不借助数据库或其他的设备保存相关信息的话,整体的管理上比较繁琐,比方修改编辑.比方阅读权 ...

  9. 浅谈局域网ARP攻击的危害及防范方法(图)

    浅谈局域网ARP攻击的危害及防范方法(图)   作者:冰盾防火墙 网站:www.bingdun.com 日期:2015-03-03   自 去年5月份开始出现的校内局域网频繁掉线等问题,对正常的教育教 ...

随机推荐

  1. 【Shell】变量的取用、删除、取代与替换

    ——来自<鸟哥的Linux私房菜> ——总结做方便查阅之用 变量的取用: echo echo $variableecho $PATHecho ${PATH} 变量的配置守则1.变量与变量内 ...

  2. CentOS7的安装以及GPT和MBR

    讲到GPT(GUID partition Table)和MBR(Master Boot Record)首先要将一下EFI(Extension Firmware Interface)和BIOS(Basi ...

  3. Spring boot 学习 九

    一:经过试验发现,如果使用如下的Controller(@RequestBody), 前台POST的请求body只能是JSON,如果是form-data, X-www-form-urlencoded 或 ...

  4. Http协议-URI和资源

    所有东西都有一个标准化的名字,以帮助人们寻找城市中的各种资源.书籍有ISBN号,公交车有线路号,银行账户有账户编码,人有身份证,街道有街道名称.人们告诉图书馆管理员书籍的ISBN号,他即可找出该书籍的 ...

  5. 提取html里面url()导入的图片正则表达式

    之前写过一次,后来无意发现还是有问题,比如 <a onclick="openZoosUrl('chatwin','param'); 这个click事件函数里面就有url()部分,造成了 ...

  6. 自定义TabWidget

    在开发过程中,默认的TabWidget不能满足我们对于UI的要求并且没有足够的属性工我们去修改,这个时候能够自定义TabWidget是非常必要的.自定义TabWidget组要运用的是TabSpec.s ...

  7. Git 分支管理 BUG分支

    BUG分支  廖雪峰 软件开发中,bug就像家常便饭一样.有了bug就需要修复, 在Git中,由于分支是如此的强大,所以, 每个bug都可以通过一个新的临时分支来修复,修复后,合并分支,然后将临时分支 ...

  8. ue4 模拟tween

    timeline的设置,注意timeLine可以使用外部的曲线,这个比较方便做各种曲线,timeline内部只适合打单个点

  9. IT兄弟连 JavaWeb教程 监听器1

    1  基本概念 监听器是一个专门用于对其他对象身上发生的事件或状态改变进行监听和相应处理的对象,当被监视的对象发生情况时,立即采取相应的行动.监听器其实就是一个实现特定接口的普通java程序,这个程序 ...

  10. CentOS6.5安装sqlite3[转]

    1.下载安装包:https://www.sqlite.org/download.html 2.解压 [root@mycentos ~]# tar xzvf sqlite-snapshot-201809 ...