IP代理软件,http代理,API提取-黑洞HTTP

黑洞HTTP

您的位置: 首页 > 新闻资讯 > HTTP代理 > 正文

使用TaskManager爬取2万条代理IP实现自动投票功能

发布时间:2019年04月03日 来源:http://http.hunbovps.com/News/getList/catid/8/id/252.html

话说某天心血来潮想到一个问题,朋友圈里面经常有人发投票链接,让帮忙给XX投票,以前呢会很自觉打开链接帮忙投一票。可是这种事做多了就会考虑能不能使用工具来进行投票呢,身为一名程序猿决定研究解决这个问题。于是有了以下思考


使用TaskManager爬取2万条代理IP实现自动投票功能

1.是否能一个人投多票,如果不行又是什么限制了一人投多票?


答:投票网站限制了一个IP或者一个用户只能投一票,防止恶意刷票行为


2.如果是一个IP一票那是否代表着多个IP就能投多票了呢?


答:答案是肯定的


3.用什么方法能够在代码里面改变自己请求的IP?


答:HTTP请求的时候设置代理IP


4.多个代理IP从哪里获取,获取到之后我又该如何使用代码自动化投票?


答:请看文章后面内容


本篇将介绍TaskManager内置任务-代理IP爬虫实现细节,你需要准备的知识:HtmlAgilityPack解析HTML,Quart.net。


阅读目录


代理IP介绍

HtmlAgilityPack使用

代理IP爬虫实现

自动投票简单实现

总结

代理IP介绍

百度百科介绍:代理(英语:Proxy),也称网络代理,是一种特殊的网络服务,允许一个网络终端(一般为客户端)通过这个服务与另一个网络终端(一般为服务器)进行非直接的连接。一些网关、路由器等网络设备具备网络代理功能。一般认为代理服务有利于保障网络终端的隐私或安全,防止攻击。


目前有很多厂商提供代理IP在线获取,但是很多都是提供几十个试用的,如果想使用更多的代理IP,则需付费购买。这里我找到了一个提供很多代理IP的网站,比如飞蚁代理ip,或者参考开源TaskManager介绍这篇文章。


有了这么多在线的代理IP可以解决文章开头的问题4了,可是还有个问题这些数据都是网页上的,我在代码里面怎么使用呢?这就用到了HtmlAgilityPack工具包,看名称就能猜到是用来解析HTML的。


HtmlAgilityPack使用

HtmlAgilityPack是一个开源的解析HTML元素的类库,最大的特点是可以通过XPath来解析HMTL,如果您以前用C#操作过XML,那么使用起HtmlAgilityPack也会得心应手。


解析简单的HTML


string HTML = @"<html><head><title>简单解析测试</title></head><body>

                    <div id='div1' title='div1'>

                        <table>

                             <tr>

                                <td>1</td>

                                <td title='cn'>cn</td>

                            </tr>

                        </table>

                    </div>

                </body></html>";

            var doc = new HtmlDocument();

            doc.LoadHtml(HTML);

            //输出页面标题

            Console.WriteLine("页面title:"+doc.DocumentNode.SelectSingleNode("/html/head/title").InnerText);

            //获取div1节点  方式1

            HtmlNode divNode1 = doc.GetElementbyId("div1");

            //获取div1节点  方式2

            HtmlNode divNode2 = doc.DocumentNode.SelectSingleNode("//div[@id='div1']");

            //判断节点1和节点2是否相同

            Console.WriteLine("断节点1和节点2是否相同:" + (divNode1 == divNode2));

            //获取页面所有table

            HtmlNodeCollection tableCollection = doc.DocumentNode.SelectNodes("//table");

            Console.WriteLine("页面table数量:"+tableCollection.Count);

            //获取table下所有td并输出信息

            HtmlNodeCollection tdCollection = tableCollection[0].SelectNodes("tr/td");

            foreach (var td in tdCollection)

            {

                HtmlAttribute atr = td.Attributes["title"];

                Console.WriteLine("td InnerText:" + td.InnerText + " | td title属性值:" + (atr == null ? "" : atr.Value));

            }

            Console.Read();


代理IP爬虫实现

会了HtmlAgilityPack的一些简单操作之后进入正式爬取过程,由于需要爬取的网页带IP封锁功能(一段时间请求频率过高封锁当前IP),在设计过程中我采用了爬取五次自动换代理IP突破网站限制(感觉自己坏坏的)。




整体实现逻辑


在.net里面使用WebRequest可以模拟HTTP的get Post请求,最终要的一点能设置请求时使用的代理IP,重点关注我标红的代码


/// <summary>

        /// 代理使用示例

        /// </summary>

        /// <param name="Url"></param>

        /// <param name="type"></param>

        /// <returns></returns>

        public static string GetUrltoHtml(string Url, string type)

        {

            try

            {

                var request = (HttpWebRequest)WebRequest.Create(Url);

          request.UserAgent = "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)";

                WebProxy myProxy = new WebProxy("192.168.15.11", 8015);

                //建议连接(代理需要身份认证,才需要用户名密码)

                myProxy.Credentials = new NetworkCredential("admin", "123456");

                //设置请求使用代理信息

                request.Proxy = myProxy;

                // Get the response instance.

                System.Net.WebResponse wResp = request.GetResponse();

                System.IO.Stream respStream = wResp.GetResponseStream();

                // Dim reader As StreamReader = New StreamReader(respStream)

                using (System.IO.StreamReader reader = new System.IO.StreamReader(respStream, Encoding.GetEncoding(type)))

                {

                    return reader.ReadToEnd();

                }

            }

            catch (System.Exception ex)

            {

                //errorMsg = ex.Message;

            }

            return "";

        }

了解如何使用代理IP,离我们的目标又近了一步,下面就是代理IP获取的实现了,由于代码有点多,我这里只贴出重要部分,IpProxyGet.cs源码可到文章末尾自行下载。


        /// <summary>

        /// 获取总页数

        /// </summary>

        /// <returns>总页数</returns>

        private static int GetTotalPage(string IPURL, string ProxyIp)

        {

            var doc = new HtmlDocument();

            doc.LoadHtml(GetHTML(IPURL, ProxyIp));

            var res = doc.DocumentNode.SelectNodes(@"//div[@class='pagination']/a");

            if (res != null && res.Count > 2)

            {

                int page;

                if (int.TryParse(res[res.Count - 2].InnerText, out page))

                {

                    return page;

                }

            }

            return 1;

        }

解析每一页HTML数据


 View Code

最终会获取2万多条数据




自动投票简单实现

这里使用.net的WebBrowser控件来加载页面,最终效果如下




 #region 设置代理IP

        private void button2_Click(object sender, EventArgs e)

        {

            string proxy = this.textBox1.Text;

            RefreshIESettings(proxy);

            IEProxy ie = new IEProxy(proxy);

            ie.RefreshIESettings();

            //MessageBox.Show(ie.RefreshIESettings().ToString());

        }

        #endregion

        #region 取消代理IP

        private void button3_Click(object sender, EventArgs e)

        {

            IEProxy ie = new IEProxy(null);

            ie.DisableIEProxy();

        }

        #endregion

        #region 打开网页

        private void button1_Click(object sender, EventArgs e)

        {

            string url = txt_url.Text.Trim();

            if (string.IsNullOrEmpty(url))

            {

                MessageBox.Show("请输入要打开的网址");

                return;

            }

            this.webBrowser1.Navigate(url, null, null, null);

        }

        #endregion

总结

本篇要介绍的内容到此结束了,下面写点我的期待!希望有喜欢的朋友一起来完善TaskManager(完全开源的),使之成为一款能够提高生活便捷性的工具,添加很多新任务。比如:第二天要下雨或者下雪,发个邮件提醒,带上雨伞…。好了到了放出源代码的时间了。敬请期待下一篇!


简单投票源代码:http://files.cnblogs.com/files/yanweidie/SimpleIP.rar


TaskManagerSVN地址:http://code.taobao.org/svn/TaskManagerPub/Branch   使用svn checkout指令进行下载。


GitHub地址:https://github.com/CrazyJson/TaskManager


体验工具下载地址:TaskManager  解压后文件执行合并SQL,修改Config.xml数据库连接,使用WSWinForm进行安装。


相关文章内容简介

1 使用TaskManager爬取2万条代理IP实现自动投票功能

话说某天心血来潮想到一个问题,朋友圈里面经常有人发投票链接,让帮忙给XX投票,以前呢会很自觉打开链接帮忙投一票。可是这种事做多了就会考虑能不能使用工具来进行投票呢,身为一名程序猿决定研究解决这个问题。于是有了以下思考1.是否能一个人投多票,如果不行又是什么限制了一人投多票?答:投票网站限制了一个IP或者一个用户只能投一票,防止恶意刷票行为2.如果是一个IP一票那是否代表着多个IP就能投多票了呢?答:答案是肯定的3.用什么方法能够在代码里面改变自己请求的IP?答:HTTP请求的时候设置代理IP4.多个代理IP从哪里获取,获取到之后我又该如何使用代码自动化投票?答:请看文章后面内容本篇将介绍TaskManager内置任务-代理IP爬虫实现细节,你需要准备的知识:HtmlAgilityPack解析HTML,Quart.net。阅读目录代理IP介绍HtmlAgilityPack使用代理IP爬虫实现 [阅读全文]

热门标签

最新标签

推荐阅读

  1. 19

    2019-08

    关于使用代理ip爬取数据的常见问题

    虽然 代理服务器 特别昂贵但并不是特别贵啦,但重要的是要把事情放在眼前,并认识到如果你的目标网站检测到你并且提供了伪造的信息,这可能会导致更大的资金负担; 在这一点上,支付具

  2. 31

    2019-10

    用代理IP为什么爬虫还是不成功?

    爬虫和代理ip的联系非常紧密,爬虫现在有着很重要的意义,例如大数据就离不开爬虫。而控制爬虫主要就是反爬虫策略,爬虫工作中要避免反爬虫的发现。避免反爬虫的方法有很多,首先就是

  3. 29

    2019-05

    如何获取到高质量的https代理ip资源?

    互联网的快速发展日新月异,人们对代理IP的需求也与日俱增,以前对代理的需求大都为HTTP代理,而如今,对https代理的需求越来越多,然而,好的https代理也并不是那么好找。

  4. 07

    2019-11

    黑洞http代理有什么优势?

    代理ip的作用不在普通工作岗位上提现,是在网络工作者上提现。因为我们在采集别人网站上的数据时需要不断的更换 IP地址 ,这样才能安全自由的放心采集数据。很多人喜欢用免费的ip代理,

  5. 17

    2019-05

    游离在白黑帽之间的代理IP软件

    非黑即白则是小孩子思维,灰色才是成年人的常态。同理,在网站SEO优化当中亦是如此。死扣TDK标签以及批量做长尾,已经大不如以前,而且繁重的工作量已失去那些追求SEO技术精神。

  6. 04

    2019-09

    经济实惠的代理IP服务商哪里有?

    互联网的迅速发展,用户需求的不断增多,代理IP迅速崛起,用户们实现一些目的时不得不随时随地得使用代理IP。由于代理IP市场的巨大和开放,代理IP行业可以说是鱼龙混杂,参差不齐,想要