苏苏网赚论坛

 找回密码
 立即注册
查看: 479|回复: 0

一个简单C#爬虫程序

[复制链接]
跳转到指定楼层
楼主
发表于 2019-5-31 14:10:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
转载了一篇文章,希望对一些人提供帮助啊,相对于来说比较简单,但是,有几成新手还是颇有收益的

这篇文章只是简单展示一个基于HTTP请求如何抓取数据的文章

图1:



如图1,我们工作过程中,无论平台网站还是企业官网,总少不了新闻展示。如某天产品经理跟我们说,推广人员想要抓取百度新闻中热点要闻版块提高站点百度排名。要抓取百度的热点要闻版本,首先我们先要了解站点https://news.baidu.com/请求头(Request headers)信息。

为什么要了解请求头(Request headers)信息?

原因是我们可以根据请求头信息某部分报文信息伪装这是一个正常HTTP请求而不是人为爬虫程序躲过站点封杀,而成功获取响应数据(Response data)。

如何查看百度新闻网址请求头信息?

图2:

如图2,我们可以打开谷歌浏览器或者其他浏览器开发工具(按F12)查看该站点请求头报文信息。从图中可以了解到该百度新闻站点可以接受text/html等数据类型;语言是中文;浏览器版本是Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36等等报文信息,在我们发起一个HTTP请求的时候直接携带该报文信息过去。当然并不是每个报文信息参数都必须携带过去,携带一部分能够请求成功即可。

那什么是响应数据(Response data)?

图3:



如图3,响应数据(Response data)是可以从谷歌浏览器或者其他浏览器中开发工具(按F12)查看到的,响应可以是json数据,可以是DOM树数据,方便我们后续解析数据。

当然您可以学习任意一门开发语言开发爬虫程序:C#、NodeJs、Python、Java、C++。

但这里主要讲述是C#开发爬虫程序。微软为我们提供两个关于HTTP请求HttpWebRequest,HttpWebResponse对象,方便我们发送请求获取数据。以下展示下C# HTTP请求代码:

View Code

还有一个我自定义传参对象,当然无论传入或者传出的对象都是你们根据自己实际业务需求定义的:

View Code

根据展示的代码,我们可以发现HttpWebRequest对象里面都封装了很多Request headers报文参数,我们可以根据该网站的Request headers信息在微软提供的HttpWebRequest对象里设置(看代码报文参数注释,都有写相关参数说明,如果理解错误,望告之,谢谢),然后发送请求获取Response data解析数据。

还有补充一点,爬虫程序能够使用代理IP最好使用代理IP,这样降低被封杀机率,提高抓取效率。但是代理IP也分质量等级,对于某一些HTTPS站点,可能对应需要质量等级更加好的代理IP才能穿透,这里暂不跑题,后续我会写一篇关于代理IP质量等级文章详说我的见解。

C#代码如何使用代理IP?

微软NET框架也为了我们提供一个使用代理IP 的System.Net.WebProxy对象,关于使用代码如下:

View Code

关于 System.Net.WebProxy对象参数说明,我在代码里面也做了解释。

如果获取到Response data数据是json,xml等格式数据,这类型解析数据方法我们这里就不详细说了,请自行百度。这里主要讲的是DOM树 HTML数据解析,对于这类型数据有人会用正则表达式来解析,也有人用组件。当然只要能获取到自己想要数据,怎么解析都是可以。这里主要讲我经常用到解析组件 HtmlAgilityPack,引用DLL为(using HtmlAgilityPack)。解析代码如下:

View Code

下面主要展示抓取结果。

图4:



如图4,抓取效果,一个简单爬虫程序就这样子完成了

爬虫代理IP提取:www.hemadaili.com
热帖推荐
回复

使用道具 举报

广告合作|最大的网赚客中文交流社区!十年老站!

GMT+8, 2024-4-27 11:06 , Processed in 0.140400 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.1 VIP版

© 2012-2022 苏苏网赚论坛 版权所有 | 10年老品牌

快速回复 返回顶部 返回列表