C#采集代理服务器ip并设置IE代理--HtmlAgilityPack实战代码

今天在博客园看到一篇文章,说是C#采集某某的数据,其实做采集小软件很久了,

用的最好的还是HtmlAgilityPack,真的没话说,非常方便快捷。

这里有详细介绍[.Net解析html文档类库HtmlAgilityPack完整使用说明--采集软件开发尤其好用].

本文不做详细说明了。主要还是上代码啊。毕竟业务应用才是我们开发人员努力编码的最终目的,

谁也不会为了单纯写点代码就自我满足了,满足业务需求才是主要的。

最近朋友叫我帮忙写一个小程序,获取某个网站的代理。也不怕大家知道了,就是这个网站

http://www.youdaili.cn/   牛逼吧??好像你要批量的代理ip还得花钱买的。

但是现在我就告诉你不用花钱的方法,就是自己去复制,哈哈,开玩笑。

程序员都是懒人,谁会去复制,还是交给程序自动实现吧--那就是采集程序。

言归正传,今天就是主要介绍使用C#组件HtmlAgilityPack进行获取代理服务器ip和端口,

并手动设置到IE中的一个小程序。当然咯,开源哦。

代码萌点这里。百度网盘 http://pan.baidu.com/share/link?shareid=2118473016&uk=1765114824

流程很简单:打开主页,获取今天最新的代理网站地址,打开该链接,再去获取代理ip即可。

道理很简单,实现也很简单。

用程序打开网站主页http://www.youdaili.cn/  ,里面会有一个new的标示,但是我们不用这个标示,

我们用日期!这个最准确的。

我们可以看到08-19的最新代理就在那里。但是怎么让程序得到那?

首先我们可以用chrome的代码工具查看源代码,

我们想要得到的链接是在ul的li下面。

所有我们可以得到这样的正则表达式Xpath://ul/li/a

对应程序代码就是:

iplist = new List<Model.IpModel>();//我的实体

HtmlAgilityPack.HtmlWeb hw = new HtmlAgilityPack.HtmlWeb();//用的HtmlAgilityPack

hw.AutoDetectEncoding = false;

//现在下面的代码很重要。

HttpWebRequest req;

req = WebRequest.Create(new Uri(@"http://www.youdaili.cn/")) as HttpWebRequest;

req.Method = "GET";

HttpWebResponse rs = (HttpWebResponse)req.GetResponse();

System.IO.StreamReader sr = new StreamReader(rs.GetResponseStream(), System.Text.Encoding.GetEncoding("utf-8"));

try

{

HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();

doc.Load(sr);

GetHrefs(doc); //然后就是上面所说的用的正则表达式了。

}

catch (Exception e)

{

Console.WriteLine(e.Message.ToString());

Console.WriteLine(e.StackTrace);

}

大家可能注意到上面标红的地方说明很重要。主要是youdaili.cn的网站编码有点问题。只有这样才能得出gb2312的网页源代码。

然后就是上面所说的用的正则表达式了。

private void GetHrefs(HtmlAgilityPack.HtmlDocument _doc)

{

string todaydaili = DateTime.Now.ToString("MM-dd");

HtmlNodeCollection hrefs = _doc.DocumentNode.SelectNodes("//ul/li/a");

if (hrefs == null)

return;

foreach (HtmlNode href in hrefs)

{

if (href.Attributes["title"] != null && href.Attributes["href"] != null)

{

string tilte = href.Attributes["title"].Value;

string urll = href.Attributes["href"].Value;

if (tilte.IndexOf(todaydaili) >= 0 && urll.Length > 0)

{

IpUrl model = new IpUrl();

if (urll.IndexOf("guonei") > 0)

{

model.DaiLi = 0;

model.Url = urll;

IpUrlList.Add(model);

}

if (urll.IndexOf("guowai") > 0)

{

model.DaiLi = 1;

model.Url = urll;

IpUrlList.Add(model);

}

}

}

}

string url = "";

int tmppage = 1;

foreach(IpUrl urla in IpUrlList)

{

for (int startpage = 1; startpage <= 10; startpage++)

{

this.lb_result.Text = "正在采集第" + tmppage.ToString() + "页IP列表请稍后.........";

url = urla.Url.Replace(".html","");

if (tmppage != 1)

{

url = url + "_" + startpage.ToString() + ".html";

}

else

{

url = url + ".html";

}

CaiJiIp(url, tmppage, urla.DaiLi);

tmppage++;

}

}

this.lb_result.Text = "本次采集采集完毕!";

this.btn_caiji.Enabled = true;

this.timer1.Stop();

}

采集之后,我现在是保存到内存,还没有实际保存数据,各位自行解决数据保存问题吧。

采集之后的代理数据,怎么使用概不负责。haha。

转发注明来源哦:IT分享 ***

 
 

HtmlAgilityPack实战代码的更多相关文章

  1. 看完让你彻底理解 WebSocket 原理,附完整的实战代码(包含前端和后端)

    1.前言 最近有同学问我有没有做过在线咨询功能.同时,公司也刚好让我接手一个 IM 项目.所以今天抽时间记录一下最近学习的内容.本文主要剖析了 WebSocket 的原理,以及附上一个完整的聊天室实战 ...

  2. DOM基础操作实战代码

    对于已经讲解给大家的DOM实战,我今天给大家几个实战代码,可以让大家加深对此的理解! 1.用DOM动态生成这样一个结构: <div class=”example”> <p class ...

  3. Magenta Demos Magenta 实战代码

    Magenta 实战代码 这个仓库包含了很多 Magenta 模型的实现.看 Magenta 库以及模型,看我们的主仓库:https://github.com/tensorflow/magenta A ...

  4. Scala零基础教学【90-101】Akka 实战-代码实现

    第90讲:基于Scala的Actor之上的分布式并发消息驱动框架Akka初体验 akka在业界使用非常广泛 spark背后就是由akka驱动的 要写消息驱动的编程模型都首推akka 下面将用30讲讲解 ...

  5. JavaScript正则表达式的模式匹配教程,并且附带充足的实战代码

    JavaScript正则表达式的模式匹配 引言 正文 一.正则表达式定义 二.正则表达式的使用 三.RegExp直接量 (1)正则表达式初体验 (2)深入了解正则 字符类 重复 选择 分组与引用 指定 ...

  6. 【实战代码】PHP实现读取一个1G的文件大小

    本文地址:http://www.cnblogs.com/aiweixiao/p/7535351.html 欢迎关注我的微信公众号哈 “ 程序员的文娱情怀” http://t.cn/RotyZtu [背 ...

  7. dubbo项目实战代码展示

    最近公司项目使用dubbo服务,于是就去网上搜索关于dubbo的相关资料,真的很多,但是对于很多人并不是很了解框架或者 不是太适合新手的片段代码,于是我就根据项目的相关内容把dubbo部分单独切出来, ...

  8. python实战===代码

    #!/usr/bin/env python # encoding:utf-8 import requests import json from conf import STORE_DICT_LIST ...

  9. C基础 时间业务实战代码

    引言 业务代码中遇到这样需求, 1. 二者是同一天吗, 2. 时间戳和时间串来回转, 3. 其它扩展需求 等. C写代码同样需要处理这方面时间问题. 本文就是为了解决这个问题. 相比其它时间库, 这里 ...

随机推荐

  1. bootstrap-wysiwyg 结合 base64 解码 .net bbs 图片操作类

    using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Dr ...

  2. 什么时候需要使用Double? double、float、decimal的区别

    原文:什么时候需要使用Double? double.float.decimal的区别 float:浮点型,含字节数为4,32bit,数值范围为-3.4E38~3.4E38(7个有效位) double: ...

  3. php 基础算法(用*表示金字塔)通过hash 比較两个数组同样的数

    当作为一名php 程序猿,每天总与数据库打交道,做着最底层的程序猿的工作,開始着手研究一些算法,希望自己能在计算机的道路上走的更远.事实上我更喜欢管理,希望自己能作为一个卓越的管理者,但并不影响我对技 ...

  4. MVC 5 Scaffolding多层架构代码生成向导开源项目

    asp.net MVC 5 Scaffolding多层架构代码生成向导开源项目(邀请你的参与)   Visual Studio.net 2013 asp.net MVC 5 Scaffolding代码 ...

  5. C语言 链表

    原文:C语言 链表 最近在复习数据结构,想把数据结构里面涉及的都自己实现一下,完全是用C语言实现的. 自己编写的不是很好,大家可以参考,有错误希望帮忙指正,现在正处于编写阶段,一共将要实现19个功能. ...

  6. 一步一步写算法(之n!中末尾零的个数统计)

    原文:一步一步写算法(之n!中末尾零的个数统计) [ 声明:版权所有,欢迎转载,请勿用于商业用途.  联系信箱:feixiaoxing @163.com] 在很多面试的题目中,求n!结果中零的个数也是 ...

  7. Spring IOC之基于注解的容器配置

    Spring配置中注解比XML更好吗?基于注解的配置的介绍提出的问题是否这种途径比XML更好.简单来说就是视情况而定. 长一点的答案是每一种方法都有自己的长处也不足,而且这个通常取决于开发者决定哪一种 ...

  8. Lua 5.2 Reference Manual

    Lua 5.2 Reference Manual.pdf

  9. hibernate在持久对象的生命周期(三州:自由状态,持久状态,自由状态 之间的转换)

    三种状态的基本概念: 1.  临时身份(Transient):也被称为自由状态,它只存在于内存中,并且在数据库中没有相应的数据. 使用new创建的对象,久化,没有处于Session中,处于此状态的对象 ...

  10. .NET MVC4 实训记录之一(引入Unity3.0 Ioc框架)

    一直在做维护项目,没有机会接触完整的架构,于是自学.NET MVC.自今日起,将自学的过程.遇到的问题以及解决方案记录下来. 在WebApp项目中右键,使用NuGet引入Unity3.0.