在前几天看到一片公众号的文章是关于.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
{ /// <summary>
///
/// 作者:haojieli
/// 时间:2017-02-21
/// 备注:HtmlAgilityPack例子
///
/// </summary>
/// <param name="args"></param>
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,具体看上面的代码 !我相信没人会看我敲的这段文字。就酱紫吧

运行效果:

下载exe例子

C#丨爬虫基础的更多相关文章

  1. Python爬虫基础

    前言 Python非常适合用来开发网页爬虫,理由如下: 1.抓取网页本身的接口 相比与其他静态编程语言,如java,c#,c++,python抓取网页文档的接口更简洁:相比其他动态脚本语言,如perl ...

  2. python 3.x 爬虫基础---Urllib详解

    python 3.x 爬虫基础 python 3.x 爬虫基础---http headers详解 python 3.x 爬虫基础---Urllib详解 前言 爬虫也了解了一段时间了希望在半个月的时间内 ...

  3. python 3.x 爬虫基础---常用第三方库(requests,BeautifulSoup4,selenium,lxml )

    python 3.x 爬虫基础 python 3.x 爬虫基础---http headers详解 python 3.x 爬虫基础---Urllib详解 python 3.x 爬虫基础---常用第三方库 ...

  4. java网络爬虫基础学习(三)

    尝试直接请求URL获取资源 豆瓣电影 https://movie.douban.com/explore#!type=movie&tag=%E7%83%AD%E9%97%A8&sort= ...

  5. java网络爬虫基础学习(一)

    刚开始接触java爬虫,在这里是搜索网上做一些理论知识的总结 主要参考文章:gitchat 的java 网络爬虫基础入门,好像要付费,也不贵,感觉内容对新手很友好. 一.爬虫介绍 网络爬虫是一个自动提 ...

  6. python从爬虫基础到爬取网络小说实例

    一.爬虫基础 1.1 requests类 1.1.1 request的7个方法 requests.request() 实例化一个对象,拥有以下方法 requests.get(url, *args) r ...

  7. 爬虫基础以及 re,BeatifulSoup,requests模块使用

    爬虫基础以及BeatifulSoup模块使用 爬虫的定义:向网站发起请求,获取资源后分析并提取有用数据的程序 爬虫的流程 发送请求 ---> request 获取响应内容 ---> res ...

  8. python爬虫-基础入门-python爬虫突破封锁

    python爬虫-基础入门-python爬虫突破封锁 >> 相关概念 >> request概念:是从客户端向服务器发出请求,包括用户提交的信息及客户端的一些信息.客户端可通过H ...

  9. python爬虫-基础入门-爬取整个网站《3》

    python爬虫-基础入门-爬取整个网站<3> 描述: 前两章粗略的讲述了python2.python3爬取整个网站,这章节简单的记录一下python2.python3的区别 python ...

随机推荐

  1. Android.mk文件详解(转)

    源:Android.mk文件详解 从对Makefile一无所知开始,折腾了一个多星期,终于对Android.mk有了一个全面些的了解.了解了标准的Makefile后,发现Android.mk其实是把真 ...

  2. BootStrap TreeView使用示例

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  3. php 利用socket上传文件

    php 利用socket上传文件 张映 发表于 2010-06-02 分类目录: php 一,利用fsockopen来上传文件 以前我写过一篇关于socket通信原理的博文http://blog.51 ...

  4. UVa 727 - Equation

    题目大意:给一个中缀表达式,转换成后缀表达式. 这类题一直不太会,让我想就是建一棵表达式树,然后后续遍历算了,可是建树的过程实在太麻烦了.今天才看到有中缀表达式转换成后缀表达式的算法,可以用栈进行实现 ...

  5. bzoj1562[NOI2009]变换序列——2016——3——12

    任意门:http://www.lydsy.com/JudgeOnline/problem.php?id=1562 题目: 对于0,1,…,N-1的N个整数,给定一个距离序列D0,D1,…,DN-1,定 ...

  6. php 常用代码段

    1.写文件 $fp = fopen("jsapi_ticket.json", "w+"); fwrite($fp, $str); fclose($fp); 2. ...

  7. 定制jackson的自定义序列化(null值的处理)

    http://www.cnblogs.com/lic309/p/5048631.html

  8. Cocoa 新的依赖管理工具:Carthage

    昨天搞了一下pod的安装 因为之前我都是在使用pod来进行第三方库的管理 但是拿到项目之后 竟发现这个前辈是用Carthage 说真的在这之前我从来没有用过这个玩意因为我感觉用POD已经很好了啊 很方 ...

  9. HDU-5086-Revenge of Segment Tree

    题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=5086 这题太不应该了,比赛时没做出来,本来呢,以现在的水平这题是能够做出来的,可就是题目理解错了,按题 ...

  10. C#多线程-volatile、lock关键字

    volatile是C#中最简单的一种同步关键字,其意义是针对程序中一些敏感数据,不允许多线程同时访问,保证数据在任何访问时刻,最多有一个线程访问,以保证数据的完整性,虽与java中的synchroni ...