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

首頁 > 編程 > C# > 正文

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

2020-01-24 01:27:41
字體:
來源:轉載
供稿:網友

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

答:投票網站限制了一個IP或者一個用戶只能投一票,防止惡意刷票行為

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

答:答案是肯定的

3.用什么方法能夠在代碼里面改變自己請求的IP?

答:HTTP請求的時候設置代理IP

4.多個代理IP從哪里獲取,獲取到之后我又該如何使用代碼自動化投票?

答:請看文章后面內容

本篇將介紹TaskManager內置任務-代理IP爬蟲實現細節,你需要準備的知識:HtmlAgilityPack解析HTML,Quart.net。

代理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("http://div[@id='div1']");   //判斷節點1和節點2是否相同   Console.WriteLine("斷節點1和節點2是否相同:" + (divNode1 == divNode2));   //獲取頁面所有table   HtmlNodeCollection tableCollection = doc.DocumentNode.SelectNodes("http://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   {   System.Net.WebRequest wReq = System.Net.WebRequest.Create(Url);    WebProxy myProxy = new WebProxy("192.168.15.11", 8015);   //建議連接(代理需要身份認證,才需要用戶名密碼)   myProxy.Credentials = new NetworkCredential("admin", "123456");   //設置請求使用代理信息   wReq.Proxy = myProxy;   // Get the response instance.   System.Net.WebResponse wResp = wReq.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(@"http://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(@"http://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));   }  }

最終會獲取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(完全開源的),使之成為一款能夠提高生活便捷 性的工具,添加很多新任務。比如:第二天要下雨或者下雪,發個郵件提醒,帶上雨傘…。好了到了放出源代碼的時間了。敬請期待下一篇!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久久久久高潮国产精品视| 久久精品91久久久久久再现| 欧美日韩亚洲精品内裤| 91tv亚洲精品香蕉国产一区7ujn| 中文字幕日韩欧美精品在线观看| 欧美日韩国产成人高清视频| 欧美日韩在线视频一区二区| 久久乐国产精品| 日韩av在线影视| 成人免费直播live| 国产精品吊钟奶在线| 亚洲人成亚洲人成在线观看| 久久综合伊人77777| 欧美日韩高清在线观看| 视频直播国产精品| 亚洲精品美女免费| 精品国产91乱高清在线观看| 狠狠躁夜夜躁人人爽超碰91| 欧美专区国产专区| 中文字幕日韩有码| 国产精品久久久久久久久久小说| 有码中文亚洲精品| 92裸体在线视频网站| 激情成人在线视频| 国内精品一区二区三区四区| 97精品免费视频| 日韩欧美国产免费播放| 国产三级精品网站| 亚洲人精选亚洲人成在线| 日韩亚洲欧美中文高清在线| 日韩大片免费观看视频播放| 中文字幕亚洲综合| 国产精品欧美一区二区三区奶水| 亚洲欧美国产制服动漫| 久久久精品2019中文字幕神马| 亚洲成在人线av| 26uuu另类亚洲欧美日本老年| 91久热免费在线视频| 日本中文字幕不卡免费| 久久91亚洲精品中文字幕奶水| 欧美电影院免费观看| 精品人伦一区二区三区蜜桃网站| 久久99精品国产99久久6尤物| 国语自产在线不卡| 怡红院精品视频| 伊人一区二区三区久久精品| 亚洲乱码国产乱码精品精天堂| 97婷婷大伊香蕉精品视频| 国产精品久久久久久久久粉嫩av| 懂色av一区二区三区| 国产精品99久久99久久久二8| 国产成人一区二区在线| 美女视频久久黄| 精品女同一区二区三区在线播放| 中文字幕日本精品| 成人激情视频小说免费下载| 最近2019中文免费高清视频观看www99| 久久久久久久国产精品| 国产精品96久久久久久又黄又硬| 国产精品久久久久一区二区| 亚洲深夜福利网站| 欧美成人黄色小视频| 亚洲一区二区三区在线视频| 91久久在线视频| 日韩欧美国产骚| 国产精品专区一| 久久久久国产精品一区| 国产va免费精品高清在线| 国产亚洲精品综合一区91| 亚洲女同性videos| 亚洲国产成人一区| 疯狂做受xxxx高潮欧美日本| 亚洲成av人片在线观看香蕉| 亚洲欧美日韩一区二区三区在线| 精品国产鲁一鲁一区二区张丽| 亚洲国产精品va在线观看黑人| 日韩在线观看电影| 久久福利网址导航| 欧美电影免费观看网站| 精品一区二区亚洲| 国产91精品久久久久| 欧美剧在线观看| 国产偷国产偷亚洲清高网站| 免费av在线一区| 68精品国产免费久久久久久婷婷| 欧美成人免费全部| 亚洲女人被黑人巨大进入| 中文字幕精品国产| 亚洲福利视频免费观看| 亚洲国产第一页| 日韩电影中文 亚洲精品乱码| 欧美久久精品一级黑人c片| 夜色77av精品影院| 久久久久久噜噜噜久久久精品| 亚洲欧美视频在线| 欧美激情第99页| 欧美极品少妇xxxxⅹ裸体艺术| 国产一区二区三区直播精品电影| 奇米影视亚洲狠狠色| 成人黄色短视频在线观看| 97香蕉超级碰碰久久免费软件| 最新日韩中文字幕| 亚洲色图av在线| 欧美午夜丰满在线18影院| 亚洲国产精品一区二区久| 亚洲自拍偷拍色图| 日韩欧美综合在线视频| 96国产粉嫩美女| 91久久久久久久久久久| 久久久国产视频| 51视频国产精品一区二区| 欧美国产一区二区三区| 九九精品在线观看| 欧美wwwwww| 欧美一级在线亚洲天堂| 欧美黑人xxxⅹ高潮交| 91国产美女在线观看| 久久久成人精品| 久久久精品一区二区三区| 91色视频在线导航| 欧美精品在线免费播放| 亚洲区一区二区| 亚洲区在线播放| 亚洲欧美另类人妖| 国产精品视频999| 久久精品中文字幕免费mv| 全亚洲最色的网站在线观看| 国产精品成人品| 91精品视频大全| 亚洲福利视频免费观看| 久久中文字幕视频| 91欧美精品午夜性色福利在线| 热99久久精品| 欧美午夜精品久久久久久久| 欧美一区二区三区免费视| 成人国产精品久久久久久亚洲| 亚洲天堂av网| 久久久视频免费观看| 亚洲人成电影在线播放| 久久久视频在线| 欧美精品videosex牲欧美| 亚洲天堂男人天堂| 精品久久久久久久久久久久| 久久成人这里只有精品| 色偷偷av一区二区三区| 亚洲精品91美女久久久久久久| 成人高清视频观看www| 57pao精品| 国产成人精品视频| 久久久久久久久久久91| …久久精品99久久香蕉国产| 国产精品免费久久久久久| 国产精品视频中文字幕91| 精品亚洲aⅴ在线观看| 欧美另类极品videosbest最新版本| 日本sm极度另类视频| 亚洲最大激情中文字幕| 精品国产成人在线| 秋霞午夜一区二区| 亚洲伊人久久大香线蕉av| 大胆人体色综合| 亚洲夜晚福利在线观看| 日韩欧美在线一区| 搡老女人一区二区三区视频tv|