C#丨爬虫基础
在前几天看到一片公众号的文章是关于.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,具体看上面的代码 !我相信没人会看我敲的这段文字。就酱紫吧
运行效果:

C#丨爬虫基础的更多相关文章
- Python爬虫基础
前言 Python非常适合用来开发网页爬虫,理由如下: 1.抓取网页本身的接口 相比与其他静态编程语言,如java,c#,c++,python抓取网页文档的接口更简洁:相比其他动态脚本语言,如perl ...
- python 3.x 爬虫基础---Urllib详解
python 3.x 爬虫基础 python 3.x 爬虫基础---http headers详解 python 3.x 爬虫基础---Urllib详解 前言 爬虫也了解了一段时间了希望在半个月的时间内 ...
- python 3.x 爬虫基础---常用第三方库(requests,BeautifulSoup4,selenium,lxml )
python 3.x 爬虫基础 python 3.x 爬虫基础---http headers详解 python 3.x 爬虫基础---Urllib详解 python 3.x 爬虫基础---常用第三方库 ...
- java网络爬虫基础学习(三)
尝试直接请求URL获取资源 豆瓣电影 https://movie.douban.com/explore#!type=movie&tag=%E7%83%AD%E9%97%A8&sort= ...
- java网络爬虫基础学习(一)
刚开始接触java爬虫,在这里是搜索网上做一些理论知识的总结 主要参考文章:gitchat 的java 网络爬虫基础入门,好像要付费,也不贵,感觉内容对新手很友好. 一.爬虫介绍 网络爬虫是一个自动提 ...
- python从爬虫基础到爬取网络小说实例
一.爬虫基础 1.1 requests类 1.1.1 request的7个方法 requests.request() 实例化一个对象,拥有以下方法 requests.get(url, *args) r ...
- 爬虫基础以及 re,BeatifulSoup,requests模块使用
爬虫基础以及BeatifulSoup模块使用 爬虫的定义:向网站发起请求,获取资源后分析并提取有用数据的程序 爬虫的流程 发送请求 ---> request 获取响应内容 ---> res ...
- python爬虫-基础入门-python爬虫突破封锁
python爬虫-基础入门-python爬虫突破封锁 >> 相关概念 >> request概念:是从客户端向服务器发出请求,包括用户提交的信息及客户端的一些信息.客户端可通过H ...
- python爬虫-基础入门-爬取整个网站《3》
python爬虫-基础入门-爬取整个网站<3> 描述: 前两章粗略的讲述了python2.python3爬取整个网站,这章节简单的记录一下python2.python3的区别 python ...
随机推荐
- 单片机modebus RTU通信实现,采用C语言,可适用于单片机,VC,安卓等(转)
源:单片机modebus RTU通信实现,采用C语言,可适用于单片机,VC,安卓等 //modebus_rtu.c /***************************************** ...
- STM32 PWM波
利用STM32产生占空比可以调节的PWM波 科普:pwm(Pulse Width Modulation)脉宽调制 关于pwm波的产生:1.首先来看一下代码: pwm波模式的相关配置(利用的是定时器TI ...
- webstorm 激活码
WebStorm 2016 最新版激活(activation code方式) 注册时,在打开的License Activation窗口中选择“activation code”,在输入框输入下面的注册码 ...
- FUNCTION CALL STACK FRAME
function call stack frame 两个寄存器 esp 栈顶指针寄存器,指向调用栈的栈顶(始终指向,意味着栈分配到哪里了,从当前栈往高地址是已经分配了的) ebp 基址指针寄存器,指向 ...
- SQLite高级:一库建多表,封装类
package eoe.database; import android.content.Context; import android.database.sqlite.SQLiteDatabase; ...
- 反射机制(实例化Class)对象
反,就是利用对象找到对象的出处 Object类中有一个方法,getClass() Date date = new Date(); System.out.println(date.getClass()) ...
- python dataframe 针对多列执行map操作
Suppose I have a df which has columns of 'ID', 'col_1', 'col_2'. And I define a function : f = lambd ...
- Bzoj3756
传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=3756 题解:乱搞 代码: #include<iostream> #include ...
- constrain to margins
如果你点了constrain to margins,左右会有8个点的空挡,而是从8个点后开始计算约束,而没有点时,已屏幕的0点开始计算.
- 聚类系数(clustering coefficient)计算
转自http://blog.csdn.net/pennyliang/article/details/6838956 Clustering coefficient的定义有两种:全局的和局部的. 全局的算 ...