本人开发的开发者技术变现资源聚集地,大家支持下,下面是网址

https://www.baiydu.com

这里用到一个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 = ; i < collectiontrs.Count; i++)
{
HtmlAgilityPack.HtmlNode itemtr = collectiontrs[i]; HtmlNodeCollection collectiontds = itemtr.ChildNodes;
//table中第一个是能用的代理标题,所以这里从第二行TR开始取值
if (i>)
{
HtmlNode itemtdip = (HtmlNode)collectiontds[]; HtmlNode itemtdport = (HtmlNode)collectiontds[]; HtmlNode itemtdspeed = (HtmlNode)collectiontds[]; string ip = itemtdip.InnerText.Trim();
string port = itemtdport.InnerText.Trim(); string speed = itemtdspeed.InnerHtml;
int beginIndex = speed.IndexOf(":", , speed.Length);
int endIndex = speed.IndexOf("%", , speed.Length); int subSpeed = int.Parse(speed.Substring(beginIndex + , endIndex - beginIndex - ));
//如果速度展示条的值大于90,表示这个代理速度快。
if (subSpeed > )
{
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 = ; i <= ; i++)
{ ThreadPool.QueueUserWorkItem(getProxyList, i);
}
Console.Read();
} }

本人创业做的一款androidApp, 下载量已经有2000多万,各种当前热门的网络手机奖励红包全部集成,另外还有热门电影和淘宝高额优惠券!很适合各类型的用户。

 

最新文章

  1. Entity Framework 6 Database-first连接Oracle11g
  2. dede织梦cms-dede:autochannel标签
  3. JavaScript之bind,call,apply
  4. Python基础教程【读书笔记】 - 2016/7/7
  5. 优化checkbox和radio,类似Bootstrap中的iCheck
  6. LC.exe exited with code -1 报错
  7. 49. Sort Letters by Case
  8. [转]Android Volley完全解析(四),带你从源码的角度理解Volley
  9. [LeetCode]题解(python):076-Minimum Window Substring
  10. Python登录页面及
  11. NYOJ--45--棋盘覆盖(大数)
  12. sublime text3添加右键打开的操作
  13. strstr()与find()
  14. Python协程(真才实学,想学的进来)
  15. java静态工厂
  16. javascript随笔和常见的知识点
  17. nginx 重写URL尾部斜杠
  18. Atitit tomcat在linux服务器的启动与其他
  19. windows10下基于vs2015的 caffe安装教程及python接口实现
  20. HTML字符转码

热门文章

  1. 一颗简单的hibernate栗子
  2. nodejs抓取网络图片转换为base64编码的图片
  3. MAC本上appium连接真机
  4. 如何使用lxml的XPath功能
  5. 6步就能搞出个react网站哈,玩一把!
  6. SSE再学习:灵活运用SIMD指令6倍提升Sobel边缘检测的速度(4000*3000的24位图像时间由180ms降低到30ms)。
  7. SMS Error code: +CMS
  8. 走过夏天,我的H5旅程,一路慢行
  9. Protocol Buffers与FlatBuffers效率对比
  10. java中创建多线程两种方式以及实现接口的优点