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

焰尾迭發表於2015-09-20

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

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

 

代理IP爬蟲實現

會了HtmlAgilityPack的一些簡單操作之後進入正式爬取過程,由於需要爬取的網頁帶IP封鎖功能(一段時間請求頻率過高封鎖當前IP),在設計過程中我採用了爬取五次自動換代理IP突破網站限制(感覺自己壞壞的)。

              整體實現邏輯

在.net裡面使用WebRequest可以模擬HTTP的get Post請求,最終要的一點能設定請求時使用的代理IP,重點關注我標紅的程式碼

瞭解如何使用代理IP,離我們的目標又近了一步,下面就是代理IP獲取的實現了,由於程式碼有點多,我這裡只貼出重要部分,IpProxyGet.cs原始碼可到文章末尾自行下載。

解析每一頁HTML資料

最終會獲取2萬多條資料

 

自動投票簡單實現

這裡使用.net的WebBrowser控制元件來載入頁面,最終效果如下

檢視大圖

總結

本篇要介紹的內容到此結束了,下面寫點我的期待!希望有喜歡的朋友一起來完善TaskManager(完全開源的),使之成為一款能夠提高生活便捷性的工具,新增很多新任務。比如:第二天要下雨或者下雪,發個郵件提醒,帶上雨傘…。好了到了放出原始碼的時間了。敬請期待下一篇!

相關文章