话说某天心血来潮想到一个问题,朋友圈里面经常有人发投票链接,让帮忙给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数据
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爬虫实现 [阅读全文]
推荐阅读
03
2019-06
网络爬虫有了代理IP可以为所欲为吗
网络爬虫越来越火,很多朋友纷纷加入,各种培训班也是风生水起,很多人认为学会了网络爬虫就可以为所欲为了,抓天抓地抓空气,我会爬虫我神气,事实真的是这样吗?
19
2019-03
代理IP速度为什么会慢?
代理IP是现代社会中很多人经常使用的上网方式,特别是对于一些专业的网络营销人员来说,代理IP资源是他们工作必不可少的工具之一。在选择使用代理IP时,除了IP稳定性和安全性以外,IP速
17
2019-09
代理ip软件让换IP更方便
代理IP现在是很常见的工具,很多用户都需要代理IP的帮助,解决IP限制问题。代理IP的作用有很多,很多人不是特别了解,今天就为大家进行简单的介绍。
15
2019-11
什么情况下需要用代理IP?
当今世界最有价值的资源是什么?不是石油,而是数据。随着科技不断发展,智能手机和互联网催生了海量数据,不仅无处不在,而且价值逐年攀升。与此同时,用于挖掘采集数据的 网络爬虫
22
2019-11
如何使用HTTP代理IP更加方便?
HTTP代理IP的使用越来越广泛,在日常生活中,很多人因为工作需要使用代理IP上网,很多人因为其他原因使用代理IP上网,但还有一些人不知道怎么使用HTTP代理IP上网,今天我们来看看有哪些方
13
2019-06
便宜又好用的代理ip软件
随着互联网的快速发展,用户对于ip代理服务的需求也越来越多。然而如今市场上的ip代理服务是非常少见的,很多用户虽然想要使用ip代理服务,却很难找寻到合适的ip代理软件,因此很多用户
热门文章
注意: 严禁一切违规违法的业务,一经发现直接封帐号
Powered by wanchen tech. © | 粤ICP备18047396号-6 广州万宸软件科技有限公司http代理 版权所有