博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C#丨爬虫基础
阅读量:5137 次
发布时间:2019-06-13

本文共 4487 字,大约阅读时间需要 14 分钟。

在前几天看到一片公众号的文章是关于.NET玩爬虫。

所以今天小编索性来try一下,恰好小编最近在关注房价这一块的,索性就写了一个例子抓取房产信息的。

不善言辞的小编直接给出代码吧!相信读者也等不及了。你要是觉得有用推荐一下或者评论一下吧!

using HtmlAgilityPack;using System;using System.Collections.Generic;using System.IO;using System.Linq;using System.Net;using System.Text;namespace CatchWeb{    class Program    {        ///         ///         /// 作者:haojieli        /// 时间:2017-02-21        /// 备注:HtmlAgilityPack例子        ///         ///         ///         static void Main(string[] args)        {            start();                    }        public static void start()        {            Console.WriteLine("------------------------");            Console.WriteLine("---只可作为学习用途!");            Console.WriteLine("---作者:haojieli");            Console.WriteLine("---邮箱:2252487366@qq.com");            Console.WriteLine("------------------------");            Console.Write("是否开始抓取重庆链家的房源信息?输入Y或者N:");            String istrue = Console.ReadLine();            if (istrue == "Y" || istrue == "y")            {                String url = "http://cq.lianjia.com/xiaoqu/";                HtmlDocument doc = new HtmlDocument();                doc.LoadHtml(GetHtml(url));                HtmlNodeCollection node = doc.DocumentNode.SelectNodes("html/body/div[4]/div[1]/ul/li");                StreamWriter sw = File.CreateText("log.txt");                sw.WriteLine("------------------------");                sw.WriteLine("---只可作为学习用途!");                sw.WriteLine("---作者:haojieli");                sw.WriteLine("---邮箱:2252487366@qq.com");                sw.WriteLine("------------------------");                foreach (HtmlNode li_nodes in node)                {                    HtmlDocument titleDoc = new HtmlDocument();                    titleDoc.LoadHtml(li_nodes.InnerHtml);                    String str = titleDoc.DocumentNode.SelectNodes("//div[1]//div[1]")[0].InnerHtml;                    HtmlDocument aDoc = new HtmlDocument();                    aDoc.LoadHtml(str);                    String xiaoquPrice = titleDoc.DocumentNode.SelectNodes("//div[2]//div[1]/span")[0].InnerHtml;                    String xiaoquName = aDoc.DocumentNode.SelectNodes("//a")[0].InnerText;                    String xiaoquUrl = aDoc.DocumentNode.SelectNodes("//a")[0].Attributes["href"].Value;                    sw.WriteLine("小区名称:" + xiaoquName + " \r\n小区房源地址:" + xiaoquUrl + " \r\n小区平均价格:" + xiaoquPrice);                    Console.WriteLine("小区名称:" + xiaoquName + " \r\n小区房源地址:" + xiaoquUrl + " \r\n小区平均价格:" + xiaoquPrice);                    sw.WriteLine("----------------------------------------------------------");                    Console.WriteLine("----------------------------------------------------------");                }                Console.WriteLine("---------------信息抓取完毕!");                Console.WriteLine("---------------请在log.txt下查看抓取信息!");                Console.WriteLine("---------------按任意键退出。");                sw.Close();                Console.ReadLine();                Environment.Exit(0);            }            else if (istrue == "N" || istrue == "n")            {                Environment.Exit(0);            }            else            {                Console.WriteLine("请输入对应指令!按任意键继续。");                Console.ReadLine();                start();            }        }        public static string GetHtml(string Url)        {            HttpWebRequest req = (HttpWebRequest)WebRequest.Create(Url);            req.Method = "GET";            string str;            HttpWebResponse Stream = req.GetResponse() as HttpWebResponse;            if (Stream.CharacterSet.ToLower() == "gbk")            {                using (StreamReader reader = new StreamReader(Stream.GetResponseStream(), System.Text.Encoding.GetEncoding("gb2312")))                {                    str = reader.ReadToEnd();                    return str;                }            }            else            {                using (StreamReader reader = new StreamReader(Stream.GetResponseStream(), System.Text.Encoding.GetEncoding("utf-8")))                {                    str = reader.ReadToEnd();                    return str;                }            }        }     }}

  其中getHtml()是在网上找的一个处理乱码的,具体是谁写的望地址了。在此还是感谢一下!

代码也就不怎么解释了,官方文档都有!主要是对于网页分析这一块的,使用了HtmlAgilityPack 

HtmlAgilityPack的获取指定节点里面的内容是按照xpath来的 ,很简单的 自己看一下就可以了。如果想偷懒直接使用谷歌浏览器在console里面 选中你要抓取的代码内容,右键copy选项下面的Copy Xpath,具体看上面的代码 !我相信没人会看我敲的这段文字。就酱紫吧

运行效果:

 

转载于:https://www.cnblogs.com/haojieli/p/6424538.html

你可能感兴趣的文章
关于mysql中GROUP_CONCAT函数的使用
查看>>
OD使用教程20 - 调试篇20
查看>>
Java虚拟机(JVM)默认字符集详解
查看>>
Java Servlet 过滤器与 springmvc 拦截器的区别?
查看>>
(tmp >> 8) & 0xff;
查看>>
linux命令之ifconfig详细解释
查看>>
NAT地址转换
查看>>
Nhibernate 过长的字符串报错 dehydration property
查看>>
Deque - leetcode 【双端队列】
查看>>
gulp插件gulp-ruby-sass和livereload插件
查看>>
免费的大数据学习资料,这一份就足够
查看>>
clientWidth、clientHeight、offsetWidth、offsetHeight以及scrollWidth、scrollHeight
查看>>
企业级应用与互联网应用的区别
查看>>
itext jsp页面打印
查看>>
Perl正则表达式匹配
查看>>
DB Change
查看>>
nginx --rhel6.5
查看>>
Eclipse Python插件 PyDev
查看>>
selenium+python3模拟键盘实现粘贴、复制
查看>>
网站搭建(一)
查看>>