C#多线程爬虫抓取免费代理IP的示例代码
2017-08-28 09:28
1131 查看
这里用到一个HTML解析辅助类:HtmlAgilityPack,如果没有网上找一个增加到库里,这个插件有很多版本,如果你开发环境是使用VS2005就2.0的类库,VS2010就使用4.0,以此类推..........然后直接创建一个控制台应用,将我下面的代码COPY替换就可以运行,下面就来讲讲我两年前做爬虫经历,当时是给一家公司做,也是用的C#,不过当时遇到一个头痛的问题就是抓的图片有病毒,然后系统挂了几次。所以抓网站图片要注意安全,虽然我这里没涉及到图片,但是还是提醒下看文章的朋友。
class Program { //存放所有抓取的代理 public static List<proxy> masterPorxyList = new List<proxy>(); //代理IP类 public class proxy { public string ip; public string port; public int speed; public proxy(string pip,string pport,int pspeed) { this.ip = pip; this.port = pport; this.speed = pspeed; } } //抓去处理方法 static void getProxyList(object pageIndex) { string urlCombin = "http://www.xicidaili.com/wt/" + pageIndex.ToString(); string catchHtml = catchProxIpMethord(urlCombin, "UTF8"); HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument(); doc.LoadHtml(catchHtml); HtmlNode table = doc.DocumentNode.SelectSingleNode("//div[@id='wrapper']//div[@id='body']/table[1]"); HtmlNodeCollection collectiontrs = table.SelectNodes("./tr"); for (int i = 0; i < collectiontrs.Count; i++) { HtmlAgilityPack.HtmlNode itemtr = collectiontrs[i]; HtmlNodeCollection collectiontds = itemtr.ChildNodes; //table中第一个是能用的代理标题,所以这里从第二行TR开始取值 if (i>0) { HtmlNode itemtdip = (HtmlNode)collectiontds[3]; HtmlNode itemtdport = (HtmlNode)collectiontds[5]; HtmlNode itemtdspeed = (HtmlNode)collectiontds[13]; string ip = itemtdip.InnerText.Trim(); string port = itemtdport.InnerText.Trim(); string speed = itemtdspeed.InnerHtml; int beginIndex = speed.IndexOf(":", 0, speed.Length); int endIndex = speed.IndexOf("%", 0, speed.Length); int subSpeed = int.Parse(speed.Substring(beginIndex + 1, endIndex - beginIndex - 1)); //如果速度展示条的值大于90,表示这个代理速度快。 if (subSpeed > 90) { proxy temp = new proxy(ip, port, subSpeed); masterPorxyList.Add(temp); Console.WriteLine("当前是第:" + masterPorxyList.Count.ToString() + "个代理IP"); } } } } //抓网页方法 static string catchProxIpMethord(string url,string encoding ) { string htmlStr = ""; try { if (!String.IsNullOrEmpty(url)) { WebRequest request = WebRequest.Create(url); WebResponse response = request.GetResponse(); Stream datastream = response.GetResponseStream(); Encoding ec = Encoding.Default; if (encoding == "UTF8") { ec = Encoding.UTF8; } else if (encoding == "Default") { ec = Encoding.Default; } StreamReader reader = new StreamReader(datastream, ec); htmlStr = reader.ReadToEnd(); reader.Close(); datastream.Close(); response.Close(); } } catch { } return htmlStr; } static void Main(string[] args) { //多线程同时抓15页 for (int i = 1; i <= 15; i++) { ThreadPool.QueueUserWorkItem(getProxyList, i); } Console.Read(); } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
您可能感兴趣的文章:
相关文章推荐
- C#多线程爬虫抓取免费代理IP
- C#多线程爬虫抓取免费代理IP
- 多线程爬虫——抓取代理ip
- Python之多线程爬虫抓取网页图片的示例代码
- C#多线程爬虫抓取免费代理IP
- python3实现网络爬虫(7)-- 使用ip代理抓取网页
- python 爬虫 批量获取代理ip的实例代码
- 利用php抓取蜘蛛爬虫痕迹的示例代码
- 【Python3.6爬虫学习记录】(十一)使用代理IP及用多线程测试IP可用性--刷访问量
- 爬虫技术(四)-- 简单爬虫抓取示例(附c#代码)
- Python2.*爬虫获取免费有效IP代理
- 使用python为爬虫获取免费代理ip
- Python开发中爬虫使用代理proxy抓取网页的方法示例
- scrapy抓取免费代理IP
- 爬虫实战----从免费IP代理网站获取连接率较好的可用IP
- Python爬虫抓取代理IP并检验可用性的实例
- Python爬虫爬取新浪微博内容示例【基于代理IP】
- python网络爬虫实战——实时抓取西刺免费代理ip
- python爬虫抓取豆瓣所有恐怖片信息(利用多线程和构建免费ip代理池)
- Python爬虫实战——代理IP全部抓取