HtmlAgilityPack 学习和笔记
介绍:
http://www.cnblogs.com/bomo/archive/2013/01/28/2879361.html
实战 c#获取外网ip
网址:http://ip138.com/
如图:分析


有个iframe 实际上查看网页源代码是没有ip的 原因浏览器引擎解析会解析src 地址:
所以我们先获取iframe的url 在根据这个地址 取ip (当然也有人说直接用这个url 不好吗?这里考虑的是怕他变化 容错性好一点 将来)
代码:
static void Main(string[] args)
{
string content = GetHtmlStr("http://www.ip138.com/", Encoding.GetEncoding("gb2312"));
var ulr = "";
HtmlDocument document = new HtmlDocument();
document.LoadHtml(content); HtmlNodeCollection targetNodeCollection = document.DocumentNode.SelectNodes(@"//iframe [1]");//取iframe DOM 第一个
if (targetNodeCollection != null && targetNodeCollection.Count == )
{
ulr = targetNodeCollection[].GetAttributeValue("src", "");//类似jq $(xxx).attr("scr") 对应javascript getattribute
}
content = GetHtmlStr(ulr, Encoding.GetEncoding("gb2312"));
document.LoadHtml(content);
HtmlNodeCollection tempText = document.DocumentNode.SelectNodes(@"//center [1]");//取center DOM 第一个
Console.WriteLine(tempText[].InnerText);//这里就没有过滤了
} public static string GetHtmlStr(string url, Encoding en)
{
try
{
WebRequest rGet = WebRequest.Create(url);
rGet.Timeout = ;
using (WebResponse rSet = rGet.GetResponse())
{
using (StreamReader reader = new StreamReader(rSet.GetResponseStream(), en))
{
return reader.ReadToEnd();
}
}
}
catch (WebException)
{
//连接失败
return null;
}
}
结果:

string content = GetHtmlStr("xxxx", Encoding.GetEncoding("gb2312"));
HtmlDocument document = new HtmlDocument();
document.LoadHtml(content);
HtmlNodeCollection targetNodeCollection = document.DocumentNode.SelectNodes(@"//font[@class='small2']");
Console.WriteLine(targetNodeCollection[targetNodeCollection.Count-].InnerText);
HtmlNodeCollection str = document.DocumentNode.SelectNodes("//td[@class='small']//table[1]//tbody[1]//tr[1]//td[2]");
Console.WriteLine(str[].InnerText);
string xpathstring = "//td[@class='small']";
HtmlNodeCollection aa = document.DocumentNode.SelectNodes(xpathstring); //所有找到的节点都是一个集合
foreach (var htmlNode in aa.Where(htmlNode => htmlNode.GetAttributeValue("style", " ") == "word-wrap:break-word;width:100%;left:0;word-break :break-all;margin-right:1px;"))
{
Console.WriteLine(htmlNode.ChildNodes[].InnerText.Replace("\n", string.Empty).Replace("\t", string.Empty));
break;
}
Console.ReadKey();
HtmlAgilityPack 学习和笔记的更多相关文章
- 每天成长一点---WEB前端学习入门笔记
WEB前端学习入门笔记 从今天开始,本人就要学习WEB前端了. 经过老师的建议,说到他每天都会记录下来新的知识点,每天都是在围绕着这些问题来度过,很有必要每天抽出半个小时来写一个知识总结,及时对一天工 ...
- DSP28377S - ADC学习编程笔记
DSP28377S - ADC学习编程笔记 彭会锋 2016-08-04 20:19:52 1 ADC类型导致的配置区别 F28377S的ADC类型是Type 4类型,我的理解是不同类型的ADC采 ...
- 学习ReactNative笔记整理一___JavaScript基础
学习ReactNative笔记整理一___JavaScript基础 ★★★笔记时间- 2017-1-9 ★★★ 前言: 现在跨平台是一个趋势,这样可以减少开发和维护的成本.第一次看是看的ReactNa ...
- 深度学习word2vec笔记之算法篇
深度学习word2vec笔记之算法篇 声明: 本文转自推酷中的一篇博文http://www.tuicool.com/articles/fmuyamf,若有错误望海涵 前言 在看word2vec的资料 ...
- 强化学习读书笔记 - 02 - 多臂老O虎O机问题
# 强化学习读书笔记 - 02 - 多臂老O虎O机问题 学习笔记: [Reinforcement Learning: An Introduction, Richard S. Sutton and An ...
- 强化学习读书笔记 - 05 - 蒙特卡洛方法(Monte Carlo Methods)
强化学习读书笔记 - 05 - 蒙特卡洛方法(Monte Carlo Methods) 学习笔记: Reinforcement Learning: An Introduction, Richard S ...
- 强化学习读书笔记 - 06~07 - 时序差分学习(Temporal-Difference Learning)
强化学习读书笔记 - 06~07 - 时序差分学习(Temporal-Difference Learning) 学习笔记: Reinforcement Learning: An Introductio ...
- (转)深度学习word2vec笔记之基础篇
深度学习word2vec笔记之基础篇 声明: 1)该博文是多位博主以及多位文档资料的主人所无私奉献的论文资料整理的.具体引用的资料请看参考文献.具体的版本声明也参考原文献 2)本文仅供学术交流,非商用 ...
- 深度学习word2vec笔记之基础篇
作者为falao_beiliu. 作者:杨超链接:http://www.zhihu.com/question/21661274/answer/19331979来源:知乎著作权归作者所有.商业转载请联系 ...
随机推荐
- Asp.Net MVC3 简单入门详解过滤器Filter(转)
前言 在开发大项目的时候总会有相关的AOP面向切面编程的组件,而MVC(特指:Asp.Net MVC,以下皆同)项目中不想让MVC开发人员去关心和写类似身份验证,日志,异常,行为截取等这部分重复的代码 ...
- 延迟容忍网络(Delay-tolerant networking)
标签: 网络networking存储工作network路由器 2012-03-24 10:01 3702人阅读 评论(0) 收藏 举报 分类: 计算机网络(12) 版权声明:本文为博主原创文章,对文章 ...
- doc2vec使用说明(二)gensim工具包 LabeledSentence
欢迎交流,转载请注明出处. 本文介绍gensim工具包中,带标签(一个或者多个)的文档的doc2vec 的向量表示. 应用场景: 当每个文档不仅可以由文本信息表示,还有别的其他标签信息时,比如,在商品 ...
- 关于SQL中的排序问题
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE generatorConfiguratio ...
- ES6新特性:使用export和import实现模块化
在ES6前, 前端就使用RequireJS或者seaJS实现模块化, requireJS是基于AMD规范的模块化库, 而像seaJS是基于CMD规范的模块化库, 两者都是为了为了推广前端模块化的工 ...
- VMware安装Centos7,已将该虚拟机配置为使用64为,却无法执行64位操作
在新建虚拟机之后,相信很多人都遇到了这个问题,这个问题的本质就是电脑是否支持虚拟化,虽然不是很清楚这是什么 解决方案就是,重启电脑(这边的电脑不是虚拟机而是主机),进入BIOS界面(不同电脑进入BIO ...
- java String 中用"+"拼接字符串的原理
之前看<thinkinjava>时记得书上分析国这个问题,然后面试的时候问道了,结果面试官说时的很含糊说是new了一个对象,我说底层用的Stringbuild.他还是说我说错了.谨以此文的 ...
- ReactNative 当前url和cookies的获取
前面大概介绍了react-native的运行helloword级别的入门,所以之后简单的东西就不写了,毕竟官网上都能够找到. reactnative官网:https://facebook.github ...
- pyspider爬豆瓣电影实例
直接copy官网实例会出现599的错误,百度了很久发现是因为证书的问题 添加这一句忽略证书 validate_cert = False 代码如下: ++++++++++++++++++++++++++ ...
- NodeJs + mongodb模块demo
代码比较通俗易懂,但是我还是在这个过程中浪费了不少时间,也算是看到了nodejs中异步的一个小坑.未来的坑还有很多,慢慢找坑填坑吧. 参考资料如下: 1.断言模块 : https://nodejs.o ...