c# 爬虫(一) HELLO WORLD

最近在摸索爬虫相关的东西,写点随笔,以便忘记。

目的与用途

现实的项目中,我们需要太多的第三方接口了。而往往这些第三方接口由于条件限制,一时拿不到。

譬如:

1. 淘宝网今天有什么特价商品。

2. 百度今天的热搜榜是什么。

3. 某用户的水电、话费、煤气有没有欠费,欠了多少。

等等问题,怎么办呢?

解决不了就请程序员出马,因为程序员是万能的,程序员是无敌的。

原理

既然我们没有能力(财力)与阿里巴巴、百度等第三方做对接,那么我们可以通过模拟访问他们对于的页面,并抓取对应的数据,来收集相关的信息。

这里,模拟是关键,也有很多细节要处理。后面我会一一讲解。

工具

工欲善其事,兵线利器。 想要模拟访问他人的网页,爬取对应的数据, 那么我们首先要了解对应的网页做了什么动作,如何了解,这里我介绍我用过的三种工具。

1. IE的开发人员工具

IE的开发人员工具,在打开IE的时候,按“F12”能直接呼出,并选择“网络” >  "开始捕捉"

对于抓包功能,需要IE的版本达到9或者9以上。 IE8不支持抓包功能。

优点: IE自带,非常方便。

缺点: IE9和IE11的界面风格还有点不一样。 IE11对于数据的拷贝非常不方便。 IE9用着感觉还行。至少数据能拷贝。 但是我有个较复杂的数据爬取,它居然漏了关键的post。

建议: 只支持IE的网站,并且相对较简单的数据爬取,可以直接选择此工具。

2. CHROME的开发人员工具

google的开发人员工具还是不错的。同样的按F12能呼出,或者按 CTRL+Shift+I也能呼出。

同样的选择“网络” 即可捕捉 操作当前页面的数据包。

优点: 浏览器自带

缺点: 暂时没发现。

3. httpwatch

前段时间的一次抓包,一直抓不到,后来想到可能是IE开发人员工具的问题,下了这个试试。 结果挺不错的。比较专业。

优点: 抓包很全面

缺点: 需要自行安装

如果是新手,我建议使用CHOROME的开发工具,或者httpwatch。

相关的类

原则上,只要实现HTTP协议的类,应该都可以, C#与抓包有关的类我用了2个,基本满足需要了。

WebClient 类,

此类使用非常简单, 直接提交页面参数与URL即可获得对应的页面输出内容。 但是如果涉及到客户端与服务端的会话保持(如:需要登录后才能看到的数据)的情况,就无勇武之地了。对于WebClient的用法

HttpWebRequest & HttpWebResponse

这两个类是较底层的类,如果需要与服务器保持会话。就需要靠这兄弟两了。

听说其他语言抓包相对简单, 而C#相对繁琐,也是因为她,谁让他那么底层的呢,而且听说还稍微有BUG,但我没遇到。

HtmlAgilityPack

此类属于第三方类,请自行百度。 当然也不一定需要用。 需要看做出的爬虫需要爬的数据多不多,如果只想获取页面中一两个字段,完全不需要用。

我们知道,使用爬虫爬出来的是一大串字符串,  但其实他就是html标记的字符串, 我们非常希望用js来操作dom元素。 可惜C#中,并没有这样的功能。而这个第三方类,就是实现了将html标记的字符串,直接转换成了类似DOM一样的对象。 这样,我们就能轻松获取查找对应的数据值了。

hello world

由于后面还会说到模拟登录、文件传输等相关信息,这里我用HttpWebRequest 类来说明。

以博客园首页列表的数据为例:

static void Main(string[] args)
        {
            string html= Hello();
            Console.WriteLine(html);
            Console.Read();
        }
         static string  Hello()
        {
            //列表数据,一般通过抓包工具,点击下一页,来发现共同的规则,从而找到对应的URL
            string url = "http://www.cnblogs.com/mvc/AggSite/PostList.aspx";
            //根据抓包工具,获取需要POST的数据, 并分析对应的数值, 明细这里PageIndex:1 是指第二页。其他的暂不做分析
            string postData = "{ \"CategoryType\":\"SiteHome\",\"ParentCategoryId\":0,\"CategoryId\":808,\"PageIndex\":1,\"TotalPostCount\":4000,\"ItemListActionName\":\"PostList\"}";

            //1.构建Request
            HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
            req.Method = "POST";// POST OR GET, 如果是GET, 则没有第二步传参,直接第三步,获取服务端返回的数据
            req.AllowAutoRedirect = false;//服务端重定向。一般设置false
            req.ContentType = "application/x-www-form-urlencoded";//数据一般设置这个值,除非是文件上传

            //2.同过流的形式,传输参数。
            byte[] postBytes = Encoding.UTF8.GetBytes(postData);
            req.ContentLength = postBytes.Length;
            Stream postDataStream = req.GetRequestStream();
            postDataStream.Write(postBytes, 0, postBytes.Length);
            postDataStream.Close();

            //3. 获取服务器端的返回数据。
            HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
            string html = new StreamReader(resp.GetResponseStream()).ReadToEnd();
            return html;
        }

最简单的模拟抓包,主要3步

1. 构建HttpWebRequest。

2. 构建需要传输的参数

3. 获取HttpWebResponse

参考文献:

http://www.cnblogs.com/hambert/p/6118299.html

http://www.crifan.com/emulate_login_website_using_csharp/

https://q.cnblogs.com/q/67303/

时间: 2024-08-02 02:43:55

c# 爬虫(一) HELLO WORLD的相关文章

开始我的Python爬虫学习之路

因为工作需要经常收集一些数据,我就想通过学爬虫来实现自动化完成比较重复的任务. 目前我Python的状况,跟着敲了几个教程,也算是懂点基础,具体比较深入的知识,是打算从做项目中慢慢去了解学习. 我是觉得如果一开始就钻细节的话,是很容易受到打击而放弃的,做点小项目让自己获得点成就感路才更容易更有信心走下去. 反正遇到不懂的就多查多问就对了. 知乎上看了很多关于入门Python爬虫的问答,给自己总结出了大概的学习方向. 基础: HTML&CSS,JOSN,HTTP协议(这些要了解,不太需要精通) R

爬虫难点分析

难点分析 1.网站采取反爬策略 2.网站模板定期变动 3.网站url抓取失败 4.网站频繁抓取ip被封 1.网站采取反爬策略 >网站默认对方正常访问的方式是浏览器访问而不是代码访问,为了防止对方使用大规模服务器进行爬虫从而导致自身服务器承受过大的压力,通常网站会采取反爬策略 根据这一特性,我们用代码模拟实现浏览器访问 2.网站模板定期变动-解决方案 >标签变动,比如<div>变动,那么我们不能把代码给写死了 (1)不同配置文件配置不同网站的模板规则 (2)数据库存储不同网站的模板规

爬虫——模拟点击动态页面

动态页面的模拟点击: 以斗鱼直播为例:http://www.douyu.com/directory/all 爬取每页的房间名.直播类型.主播名称.在线人数等数据,然后模拟点击下一页,继续爬取 #!/usr/bin/python3 # -*- conding:utf-8 -*- __author__ = 'mayi' """ 动态页面的模拟点击: 模拟点击斗鱼直播:http://www.douyu.com/directory/all 爬取每页房间名.直播类型.主播名称.在线人数

第三百二十三节,web爬虫,scrapy模块以及相关依赖模块安装

第三百二十三节,web爬虫,scrapy模块以及相关依赖模块安装 当前环境python3.5 ,windows10系统 Linux系统安装 在线安装,会自动安装scrapy模块以及相关依赖模块 pip install Scrapy 手动源码安装,比较麻烦要自己手动安装scrapy模块以及依赖模块 安装以下模块 1.lxml-3.8.0.tar.gz (XML处理库) 2.Twisted-17.5.0.tar.bz2 (用Python编写的异步网络框架) 3.Scrapy-1.4.0.tar.gz

Python有了asyncio和aiohttp在爬虫这类型IO任务中多线程/多进程还有存在的必要吗?

最近正在学习Python中的异步编程,看了一些博客后做了一些小测验:对比asyncio+aiohttp的爬虫和asyncio+aiohttp+concurrent.futures(线程池/进程池)在效率中的差异,注释:在爬虫中我几乎没有使用任何计算性任务,为了探测异步的性能,全部都只是做了网络IO请求,就是说aiohttp把网页get完就程序就done了. 结果发现前者的效率比后者还要高.我询问了另外一位博主,(提供代码的博主没回我信息),他说使用concurrent.futures的话因为我全

Python爬虫从入门到放弃(十一)之 Scrapy框架整体的一个了解

这里是通过爬取伯乐在线的全部文章为例子,让自己先对scrapy进行一个整理的理解 该例子中的详细代码会放到我的github地址:https://github.com/pythonsite/spider/tree/master/jobboleSpider 注:这个文章并不会对详细的用法进行讲解,是为了让对scrapy各个功能有个了解,建立整体的印象. 在学习Scrapy框架之前,我们先通过一个实际的爬虫例子来理解,后面我们会对每个功能进行详细的理解.这里的例子是爬取http://blog.jobb

简谈-网络爬虫的几种常见类型

众所周知,网络爬虫(或称为网络爬虫.网络蜘蛛.机器人)是搜索引擎最上游的一个模块,是负责搜索引擎内容索引的第一关. 很多人为了提高自己网站的索引量,都是去网上随便找一些爬虫工具来使用.但是很多人不知道,这些抓取网站的小爬虫是有各种各样的不同性格的. 常见的优秀网络爬虫有以下几种类型: 1.批量型网络爬虫:限制抓取的属性,包括抓取范围.特定目标.限制抓取时间.限制数据量以及限制抓取页面,总之明显的特征就是受限: 2.增量型网络爬虫(通用爬虫):与前者相反,没有固定的限制,无休无止直到抓完所有数据.

python爬虫 模拟登陆校园网-初级

最近跟同学学习爬虫的时候看到网上有个帖子,好像是山大校园网不稳定,用py做了个模拟登陆很有趣,于是我走上了一条不归路..... 先上一张校园网截图 首先弄清一下模拟登陆的原理: 1:服务器判定浏览器登录使用浏览器标识,需要模拟登陆 2: 需要post账号,密码,以及学校id python走起,我用的2.7版本,用notepad++写的,绑定python可以直接运行 由于是模拟网页登陆,需要导入urllib urllib2 cookielib库,前两个有与网页直接的接口,cookielib就是用来

爬虫的本质

w机器化的人,超越人. [初码干货]关于.NET玩爬虫这些事 - 初码 - 博客园 http://www.cnblogs.com/printhelloworld/p/6354085.htm "爬虫的本质是对目标WebServer页面行为和业务流程的精准分析,是对HTTP的深刻理解,是对正则.多线程等周边技术以及软件工程的灵活运用"

由爬虫引发的思考

前言 花了两天时间写一个简单的爬虫程序.目前所用的技术十分简单.就是获得目标页面的html文档内容,然后解析其中有用的内容.既没有实现模拟登陆,也没有任何防止反爬虫的措施,甚至没有使用多线程.不过在其中遇到的问题还是引发了我很多的思考与问题,比如爬虫的合法性问题以及爬虫的危害等.于是写下这篇文章记录一下.由于本人经验有限,引用参考了大量文章,有问题请指出. 爬虫的作用与危害 爬虫的作用 网络爬虫(Web Crawler),又称网络蜘蛛(Web Spider)或网络机器人(Web Robot),是