现在位置首页 / 开源代码 /正文

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

作者: IT小兵 | 2013年8月19日| 热度:℃ | 评论: |参与:

今天在博客园看到一篇文章,说是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的标示,但是我们不用这个标示,

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

C#采集代理


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

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

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分享 http://suchso.com

点击阅读本文所属分类的更多文章: 开源代码 。和高手一起交流:346717337
友荐云推荐

未注明转发、原文均为本站原创。分享本文请注明 原文链接

给您更多信息和帮助

在这里您可以找到更多:

技术交流群:346717337 Jquery插件交流

投稿:suchso@vip.qq.com

承接:企业网站门户/微网站/微商城/CMS系统/微信公众号运营/业务咨询

抢天猫双11红包
推荐使用阿里云服务器
echarts教程系列
本月最热文章

微信扫一扫,徜徉悠嘻网,您的休闲乐园

微信公众号:快乐每一天

随机文章
标签

技术交流群:346717337

投稿:suchso@vip.qq.com

专业专注:企业网站门户/微网站/微商城/CMS系统/微信公众号运营/付费问题咨询