亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

使用TaskManager爬取2萬條代理IP實現自動投票功能

2019-11-14 13:58:49
字體:
來源:轉載
供稿:網友

  話說某天心血來潮想到一個問題,朋友圈里面經常有人發投票鏈接,讓幫忙給XX投票,以前呢會很自覺打開鏈接幫忙投一票??墒沁@種事做多了就會考慮能不能使用工具來進行投票呢,身為一名程序猿決定研究解決這個問題。于是有了以下思考

  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數據

 /// <summary>        /// 解析每一頁數據        /// </summary>        /// <param name="param"></param>        private static void DoWork(object param)        {            //參數還原            Hashtable table = param as Hashtable;            int start = Convert.ToInt32(table["start"]);            int end = Convert.ToInt32(table["end"]);            List<IPProxy> list = table["list"] as List<IPProxy>;            ProxyParam Param = table["param"] as ProxyParam;            //頁面地址            string url = string.Empty;            string ip = string.Empty;            IPProxy item = null;            HtmlNodeCollection nodes = null;            HtmlNode node = null;            HtmlAttribute atr = null;            for (int i = start; i <= end; i++)            {                LogHelper.WriteLog(string.Format("開始解析,頁碼{0}~{1},當前頁碼{2}", start, end, i));                url = string.Format("{0}/{1}", Param.IPUrl, i);                var doc = new HtmlDocument();                doc.LoadHtml(GetHTML(url, Param.ProxyIp));                //獲取所有數據節點tr                var trs = doc.DocumentNode.SelectNodes(@"//table[@id='ip_list']/tr");                if (trs != null && trs.Count > 1)                {                    LogHelper.WriteLog(string.Format("當前頁碼{0},請求地址{1},共{2}條數據", i, url, trs.Count));                    for (int j = 1; j < trs.Count; j++)                    {                        nodes = trs[j].SelectNodes("td");                        if (nodes != null && nodes.Count > 9)                        {                            ip = nodes[2].InnerText.Trim();                            if (Param.IsPingIp && !Ping(ip))                            {                                continue;                            }                            //有效的IP才添加                            item = new IPProxy();                            node = nodes[1].FirstChild;                            if (node != null)                            {                                atr = node.Attributes["alt"];                                if (atr != null)                                {                                    item.Country = atr.Value.Trim();                                }                            }                            item.IP = ip;                            item.Port = nodes[3].InnerText.Trim();                            item.ProxyIp = GetIP(item.IP, item.Port);                            item.Position = nodes[4].InnerText.Trim();                            item.Anonymity = nodes[5].InnerText.Trim();                            item.Type = nodes[6].InnerText.Trim();                            node = nodes[7].SelectSingleNode("div[@class='bar']");                            if (node != null)                            {                                atr = node.Attributes["title"];                                if (atr != null)                                {                                    item.Speed = atr.Value.Trim();                                }                            }                            node = nodes[8].SelectSingleNode("div[@class='bar']");                            if (node != null)                            {                                atr = node.Attributes["title"];                                if (atr != null)                                {                                    item.ConnectTime = atr.Value.Trim();                                }                            }                            item.VerifyTime = nodes[9].InnerText.Trim();                            list.Add(item);                        }                    }                    LogHelper.WriteLog(string.Format("當前頁碼{0},共{1}條數據", i, trs.Count));                }                LogHelper.WriteLog(string.Format("結束解析,頁碼{0}~{1},當前頁碼{2}", start, end, i));            }        }
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.VEVb.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進行安裝。

      


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
狠狠躁夜夜躁人人躁婷婷91| 国产精品美女午夜av| 国产99久久精品一区二区| 国产91精品黑色丝袜高跟鞋| 日韩亚洲欧美中文在线| 久久精品久久久久| 日本亚洲精品在线观看| 亚洲欧美精品一区| 91国产精品视频在线| 国产精品久久77777| 伦理中文字幕亚洲| 一区二区三区无码高清视频| 国产精品一区二区三区在线播放| 成人做爰www免费看视频网站| 91国产视频在线| 两个人的视频www国产精品| 欧美亚洲视频一区二区| 日本免费一区二区三区视频观看| 久久久人成影片一区二区三区观看| 日韩视频在线观看免费| 亚洲免费av片| 正在播放欧美一区| 在线亚洲欧美视频| 91免费视频国产| 国产欧美日韩高清| 色噜噜狠狠色综合网图区| 超碰97人人做人人爱少妇| 热99在线视频| 成人97在线观看视频| 国产精品激情av电影在线观看| 欧美精品中文字幕一区| 国产情人节一区| 欧美肥老太性生活视频| 久久久国产精品免费| 国产精品对白刺激| 亚洲午夜女主播在线直播| 国产精品96久久久久久又黄又硬| www.久久撸.com| 成人国产精品久久久久久亚洲| 91中文字幕在线| 成人精品一区二区三区| 国产精品久久久久999| 日本道色综合久久影院| 最近2019中文字幕mv免费看| 午夜精品一区二区三区在线| 欧美专区中文字幕| 国产精品亚洲视频在线观看| 亚洲女同性videos| 在线视频亚洲欧美| 国产精品久久久久久久久男| 久久精品国产一区二区三区| 亚洲欧美中文字幕在线一区| 成人中文字幕+乱码+中文字幕| 亚洲国产精品va在线观看黑人| 97在线免费视频| 91社影院在线观看| 色妞色视频一区二区三区四区| 国产精品狠色婷| 91精品国产一区| 午夜精品久久久久久久久久久久久| 亚洲最大在线视频| 国内精品小视频| 欧美日韩国产第一页| 亚洲一级免费视频| 欧美专区福利在线| 亚洲免费视频网站| 国内精品久久久| 午夜精品美女自拍福到在线| 亚洲男人天天操| 色无极亚洲影院| 亚洲三级av在线| 日韩美女写真福利在线观看| 亚洲一区亚洲二区亚洲三区| 性欧美长视频免费观看不卡| 亚洲aaaaaa| 国产精品草莓在线免费观看| 亚洲国产成人爱av在线播放| 亚洲精品久久久久| 91香蕉嫩草影院入口| 亚洲精品99999| 亚洲欧美国产一区二区三区| 日韩在线视频免费观看高清中文| 国产日韩av在线| 久久69精品久久久久久国产越南| 国产一区欧美二区三区| 一区二区三区视频在线| 91高清免费在线观看| 亚洲一区二区在线播放| 国模极品一区二区三区| 97在线看免费观看视频在线观看| 欧美精品videos性欧美| 欧美巨猛xxxx猛交黑人97人| 国产精品电影网站| 国产精品久久久久久久久影视| 亚洲一区二区三区xxx视频| 亚洲国产成人爱av在线播放| 久久全国免费视频| 日本成人免费在线| 另类少妇人与禽zozz0性伦| 精品久久久久久中文字幕大豆网| 精品国产一区二区三区久久狼黑人| 2021久久精品国产99国产精品| 亚洲一区免费网站| 久久久精品国产网站| 国产精品免费视频久久久| 欧美精品九九久久| 日韩av网站电影| 69av成年福利视频| 亚洲免费av电影| 国产精品高清免费在线观看| 91九色国产视频| 日韩av不卡电影| 欧美在线精品免播放器视频| 国产中文字幕日韩| 久久亚洲精品一区| 欧美高跟鞋交xxxxhd| 中文字幕亚洲无线码a| 亚洲精品视频免费在线观看| 欧美激情视频在线免费观看 欧美视频免费一| 日韩视频在线一区| 深夜福利91大全| 亚洲精品视频在线观看视频| 久久久精品网站| 少妇高潮久久77777| 亚洲人免费视频| 国产一区二区三区在线观看网站| 国产精品亚洲片夜色在线| 亚洲欧美成人精品| 欧美高清电影在线看| 亚洲一区二区三区成人在线视频精品| 亚洲精品wwww| 亚洲欧美国产精品| 亚洲人成电影网站色| 亚洲一区中文字幕在线观看| 亚洲欧美中文日韩在线| 中文字幕亚洲专区| 久久精视频免费在线久久完整在线看| 欧美激情在线狂野欧美精品| 亚洲男人的天堂在线播放| 日韩在线不卡视频| 国产91精品久久久久| 青青草精品毛片| 国产91精品黑色丝袜高跟鞋| 成人午夜在线影院| 国产中文字幕91| 国产成人精品在线观看| 欧美黑人一级爽快片淫片高清| 91精品国产自产在线观看永久| 国产精品扒开腿做| 国产精品一久久香蕉国产线看观看| 亚洲一区二区三区视频| 日本久久中文字幕| 精品美女久久久久久免费| 精品亚洲一区二区三区四区五区| 国产精品亚洲精品| 国产精品久久久久高潮| 久久成人人人人精品欧| 欧美黑人巨大xxx极品| 亚洲人成绝费网站色www| 国产精品第七十二页| 91精品国产精品| 岛国精品视频在线播放| 中文字幕av一区| 亚洲图片在线综合|