/// <summary>
/// 读取URL数据内容
/// </summary>
/// <param name="url">网址</param>
/// <returns>网站文本内容</returns>
public string HttpGetText(string url)
{
HttpWebRequest Request = (HttpWebRequest)HttpWebRequest.Create(url);
Request.Method = "GET";
Request.ContentType = @"application/x-www-form-urlencoded";
Request.Accept = @"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8";
Request.Headers.Add(HttpRequestHeader.AcceptLanguage, @"Accept-Language:zh-CN,zh;q=0.8");
Request.UserAgent = @"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.221 Safari/537.36 SE 2.X MetaSr 1.0";
Request.Proxy = proxy;
var stream = Request.GetResponse().GetResponseStream();
var read = new StreamReader(stream);
var json = read.ReadToEnd();
read.Close();
stream.Close(); System.Diagnostics.Debug.WriteLine("".PadRight(20, '='));
System.Diagnostics.Debug.WriteLine(json);
System.Diagnostics.Debug.WriteLine("".PadRight(20, '='));
return json;
} public class IPs {
public List<proxy> items = new List<proxy>(); public class proxy {
public string ip;
public int port;
public string address;
public int speed;
public int life;//持续分钟数
public DateTime check_time;
}
}
private void button1_Click(object sender, EventArgs e)
{
var html= HttpGetText("http://www.xicidaili.com/nt");
int i1= html.IndexOf("<table id=\"ip_list\">");
int i2= html.IndexOf("</table>");
string ip_list = html.Substring(i1, i2 - i1+ "</table>".Length);
var find = new Regex(@"<tr.*?>\s*?<td.*?>.*?</td>\s*?<td.*?>(?<ip>.*?)</td>\s*?<td.*?>(?<port>.*?)</td>\s*?<td.*?>\s*?<a.*?>(?<address>.*?)</a>\s*?</td>.*?width:(?<speed>.*?)%.*?<td>(?<life>.*?)</td>.*?<td>(?<check_time>.*?)</td>.*?</tr>", RegexOptions.IgnoreCase | RegexOptions.Singleline);
var ips= find.Matches(ip_list);
listView1.BeginUpdate();
foreach (System.Text.RegularExpressions.Match item in ips) {
try
{
var ip = new IPs.proxy();
ListViewItem lvi = new ListViewItem(item.Groups["ip"].Value); ip.ip = item.Groups["ip"].Value;
lvi.SubItems.Add(item.Groups["port"].Value); ip.port = Convert.ToInt32(item.Groups["port"].Value);
lvi.SubItems.Add(item.Groups["address"].Value); ip.address = item.Groups["address"].Value;
lvi.SubItems.Add(item.Groups["speed"].Value); ip.speed = Convert.ToInt32(item.Groups["speed"].Value);
lvi.SubItems.Add(item.Groups["life"].Value); ip.life = conv(item.Groups["life"].Value);
lvi.SubItems.Add(item.Groups["check_time"].Value); ip.check_time = Convert.ToDateTime(item.Groups["check_time"].Value);
listView1.Items.Add(lvi);
IPaddress.items.Add(ip);
}
catch {
LogAdd("转换IP地址信息出错 " + item.Value);
}
}
listView1.EndUpdate();
int conv(string life) {
int a = 1;
if (life.Contains("天")) {
a = 60 * 24;
life = life.Replace("天", "");
}else if (life.Contains("分钟"))
{
a =1;
life = life.Replace("分钟", "");
}
else if (life.Contains("小时"))
{
a = 60;
life = life.Replace("小时", "");
}
return Convert.ToInt32(life)*a;
}
}

  

关键代码就是获取指定网页里的IP代理信息,然后用正则表达式提取出来

本来想着直接将html转换为xml,谁知它网页写的不标准,转换不成功

只有用正则来查找了,效果不错~

代码运行环境: vs2017

当然老版本也可以,将局部函数代码放到外部即可。

效果图:

关键代码部分:

var html= HttpGetText("http://www.xicidaili.com/nt");
int i1= html.IndexOf("<table id=\"ip_list\">");
int i2= html.IndexOf("</table>");
string ip_list = html.Substring(i1, i2 - i1+ "</table>".Length);
var find = new Regex(@"<tr.*?>\s*?<td.*?>.*?</td>\s*?<td.*?>(?<ip>.*?)</td>\s*?<td.*?>(?<port>.*?)</td>\s*?<td.*?>\s*?<a.*?>(?<address>.*?)</a>\s*?</td>.*?width:(?<speed>.*?)%.*?<td>(?<life>.*?)</td>.*?<td>(?<check_time>.*?)</td>.*?</tr>", RegexOptions.IgnoreCase | RegexOptions.Singleline);
var ips= find.Matches(ip_list);

  正则表达式推荐一个网址及学习工具:

http://deerchao.net/tutorials/regex/regex.htm#charclass

我本人也记不住 正则表达式  ,需要用的时候现查。

自动获取代理IP信息的例子,含代码,分享哦,的更多相关文章

  1. python编写的自动获取代理IP列表的爬虫-chinaboywg-ChinaUnix博客

    python编写的自动获取代理IP列表的爬虫-chinaboywg-ChinaUnix博客 undefined Python多线程抓取代理服务器 | Linux运维笔记 undefined java如 ...

  2. 分享一个获取代理ip的python函数

    分享一个获取代理ip的python函数 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 #coding:utf-8 from bs4 import Beaut ...

  3. 通过AWS的DHCP自动获取的IP地址是否会发生改变?

    针对您的问题,分析如下:1.在一个VPC内,通过AWS的DHCP自动获取的IP地址,在如何情况下会发生改变?例如我把vpc的内所有100个ec2实例全部关闭,再全部重新打开,是否会发生IP地址变化的情 ...

  4. Python学习笔记六(免费获取代理IP)

    为获取网上免费代理IP,闲的无聊,整合了一下,免费从三个代理网站获取免费代理IP,目的是在某一代理网站被限制时,仍可从可以访问的其他网站上获取代理IP.亲测可用哦!^_^  仅供大家参考,以下脚本可添 ...

  5. python爬虫之反爬虫(随机user-agent,获取代理ip,检测代理ip可用性)

    python爬虫之反爬虫(随机user-agent,获取代理ip,检测代理ip可用性) 目录 随机User-Agent 获取代理ip 检测代理ip可用性 随机User-Agent fake_usera ...

  6. Python 之自动获取公网IP

    Python 之自动获取公网IP 2017年9月30日 文档下载:https://wenku.baidu.com/view/ff40aef7f021dd36a32d7375a417866fb84ac0 ...

  7. Linux:自动获取静态IP地址,清空iptable,修改selinux脚本

    自动获取静态IP地址,清空iptable,修改selinux脚本 环境:VMware 平台:centos6.8全新 功能: 1)应用ifconfig -a,route -n,cat /etc/reso ...

  8. 解决:win8.1 oepnvpn客户端 redirect-gateway def1无效,自动获取的IP没有网关问题

    解决:win8.1 oepnvpn客户端 redirect-gateway def1无效,自动获取的IP没有网关问题 该问题是操作系统权限问题,需要将程序设置为以管理员模式运行和以windows7兼容 ...

  9. Python3.x:获取代理ip以及使用

    Python3.x:获取代理ip以及使用 python爬虫浏览器伪装 #导入urllib.request模块 import urllib.request #设置请求头 headers=("U ...

随机推荐

  1. 使用js在网页上记录鼠标划圈的小程序

    Spin-Wheel 实现鼠标在网页上转圈时记录转动圈数的小程序,每转一圈记录一次,同时要是顺时针方向的. 问题分析与实现 这个小程序的难点在于如何知道鼠标完成了一个转圈的动作,而且人工使用鼠标划圈时 ...

  2. li点击弹出序号

    <body> <ul> <li>test1</li> <li>test2</li> <li>test3</li ...

  3. [LintCode]快速幂(数论)

    计算a^n % b,其中a,b和n都是32位的整数. 快速幂搞就过了.快速幂首先就是要知道 (a*b)%c = ((a%c)*b)%c ,所以经过推导得出. (a^n)%b = ((((a%b)*a) ...

  4. java深拷贝和浅拷贝

    1.概念 java里的clone分为: A:浅复制(浅克隆): 浅复制仅仅复制所考虑的对象,而不复制它所引用的对象. b:深复制(深克隆):深复制把要复制的对象所引用的对象都复制了一遍. Java中对 ...

  5. 剑指offer_(4)

    重建二叉树: 题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字. 例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍 ...

  6. ViewPager详解

    一.ViewPager简介 ViewPager 如其名所述,是负责翻页的一个 View.准确说是一个 ViewGrop,包含多个 View 页,在手指横向滑动屏幕时,其负责对 View 进行切换.为了 ...

  7. zTree自动点击第一个节点(转载)

    var setting = { view: { dblClickExpand: true,//双击展开 showLayer: false, selectedMulti: false,//是否允许多选 ...

  8. java初级开发一系列的工具安装配置

    最近压力很大,刚刚帮朋友安装了一整套环境,按照印象写下此篇记录(没有图解),一是用来释放压力,二来希望可以帮到各位. 一.首先,Eclipse的安装,下载eclipse压缩包,一般为200~300M, ...

  9. TIME_WAIT问题总结

         最近用http_load做压测,跑出来一大串"Cannot assign requested address "的错误,查了一下,是TIME_WAIT过多导致的.因为短时 ...

  10. Array对象

    1.    Array定义 Array是可以保存任意变量的.也就是说,第一项可以是一个基本类型,第二项就可以是一个引用类型,长度也是根据内容动态增加的 var arr = new Array(); 当 ...