相信大家对于WebRequest 并不陌生,我们在C#中发请求的方式,就是创建一个WebRequest .那么如果我们想发一个请求到外网,比如国内上不了的一些网站,那么该怎么做呢?

其实WebRequest 已经帮我们想好了,WebRequest 独创了Proxy(不知道是不是独有的)模式,以下是部分代码,至于代理IP有兴趣的可以自己去网上搜索。

我这里用的是匿名代理,所以不需要凭据,这点要说明一下,有些代理是要账号名和密码的。

System.Net.WebRequest req = System.Net.WebRequest.Create("http://www.xxx.com");
req.Proxy = new System.Net.WebProxy("127.0.0.1:8024", false); //true means no proxy
System.Net.WebResponse resp = req.GetResponse();
System.IO.StreamReader sr = new System.IO.StreamReader(resp.GetResponseStream());
//Response.Write(sr.ReadToEnd().Trim());
string finalStr=sr.ReadToEnd().Trim();

如果我们能访问外网了,返回了字符串,下一步就可以格式化抓取了,这里我推荐HtmlAgilityPack ,大家可以从Nuget上去下载。

我这里抓取的网页只是个演示而已,我是根据CLASS去抓取,一层一层去抓取,分别抓取CLASS为date >time->title的InnerText

下面帖代码,要注意几点:

1.SelectNodes方法可以选择多个节点。

2.如果一个CLASS有多个节点,采用SelectNodes("xxx")[index] 方式去抓取,比如上图。

HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(finalStr);
List<string> names = new List<string>();
foreach (HtmlNode node in doc.DocumentNode.SelectNodes("//div[@class='" + "board_list board_list_type1" + "']"))
{
int i = ;
foreach (var li in node.SelectNodes("//li[@class='day']"))
{
string temp=string.Empty;
if (li.SelectNodes("//span[@class='date']")[i] != null)
{
temp = li.SelectNodes("//span[@class='date']")[i].InnerText; }
if (li.SelectNodes("//span[@class='time']")[i] != null)
{
temp += li.SelectNodes("//span[@class='time']")[i].InnerText;
}
if (li.SelectNodes("//span[@class='title']")[i] != null)
{
temp+= li.SelectNodes("//span[@class='title']")[i].InnerText;
}
names.Add(temp);
i++;
}
}

不同的网页有不同的抓取方式,不过大相径庭。最后就是显示出来。

oreach (var name in names)
{
sb+= name + "<br />";
}
Response.Write("<marquee direction=\"up\" behavior=\"scroll\" scrollamount=\"1\" scrolldelay=\"0\" loop=\"-1\" width=\"1000\" height=\"50\" hspace=\"10\" vspace=\"10\">" + sb + "</marquee>");

用WebRequest +HtmlAgilityPack 从外网抓取数据到本地的更多相关文章

  1. 5 -- Hibernate的基本用法 --4 8 外连接抓取属性

    外连接抓取能限制执行SQL语句的次数来提高效率,这种外连接抓取通过在单个select语句中使用outer join来一次抓取多个数据表的数据. 外连接抓取允许在单个select语句中,通过@ManyT ...

  2. C#抓取数据、正则表达式+线程池初步运用

    去年底用 多线程+HtmlAgilityPack.dll 写了一个抓取“慧聪网” 公司信息的小程序,代码惨不忍赌.好在能抓到数据,速度也能让人忍受就很久没管了. 最近这段时间把这个小程序发给同事看着玩 ...

  3. web scraper 抓取数据并做简单数据分析

    其实 web scraper 说到底就是那点儿东西,所有的网站都是大同小异,但是都还不同.这也是好多同学总是遇到问题的原因.因为没有统一的模板可用,需要理解了 web scraper 的原理并且对目标 ...

  4. NET 5 爬虫框架/抓取数据

    爬虫大家或多或少的都应该接触过的,爬虫有风险,抓数需谨慎.  爬虫有的是抓请求,有的是抓网页再解析 本着研究学习的目的,记录一下在 .NET Core 下抓取数据的实际案例.爬虫代码一般具有时效性,当 ...

  5. 【转】蓝牙4.0BLE cc2540 usb-dongle的 SmartRF Packet Sniffer 抓取数据方法--不错

    原文网址:http://blog.csdn.net/mzy202/article/details/32408223 蓝牙4.0BLE cc2540 usb-dongle的 SmartRF Packet ...

  6. 蓝牙4.0BLE cc2540 usb-dongle的 SmartRF Packet Sniffer 抓取数据方法 【原创,多图】

    蓝牙4.0BLE cc2540 usb-dongle的 SmartRF Packet Sniffer 抓取数据方法 [原创,多图] spm=a1z10.1.w4004-5319414070.11.Zd ...

  7. C# 从需要登录的网站上抓取数据

    [转] C# 从需要登录的网站上抓取数据 背景:昨天一个学金融的同学让我帮她从一个网站上抓取数据,然后导出到excel,粗略看了下有1000+条记录,人工统计的话确实不可能.虽说不会,但作为一个学计算 ...

  8. nodejs--实现跨域抓取数据

    最近公司安排给我一个任务,抓取页面数据:http://survey.finance.sina.com.cn/static/20205/20131120.html?pid=20205&dpc=1 ...

  9. java抓取网页数据,登录之后抓取数据。

    最近做了一个从网络上抓取数据的一个小程序.主要关于信贷方面,收集的一些黑名单网站,从该网站上抓取到自己系统中. 也找了一些资料,觉得没有一个很好的,全面的例子.因此在这里做个笔记提醒自己. 首先需要一 ...

随机推荐

  1. C# ini文件操作【源码下载】

    介绍C#如何对ini文件进行读写操作,C#可以通过调用[kernel32.dll]文件中的 WritePrivateProfileString()和GetPrivateProfileString()函 ...

  2. ASP.NET路由模型解析

    大家好,我又来吹牛逼了 ~-_-~ 转载请注明出处:来自吹牛逼之<ASP.NET路由模型解析> 背景:很多人知道Asp.Net中路由怎么用的,却不知道路由模型内部的运行原理,今天我就给大家 ...

  3. Intellij idea添加单元测试工具

    1.idea 版本是14.0.0 ,默认带有Junit,但是不能自动生成单元测试,需要下载JunitGererator2.0插件 2.Settings -Plugins,下载 JunitGenerat ...

  4. Win.ini和注册表的读取写入

    最近在做打包的工作,应用程序的配置信息可以放在注册表文件中,但是在以前的16位操作系统下,配置信息放在Win.ini文件中.下面介绍一下Win.ini文件的读写方法和注册表的编程. 先介绍下Win.i ...

  5. const extern static 终极指南

    const extern static 终极指南 不管是从事哪种语言的开发工作,const extern static 这三个关键字的用法和原理都是我们必须明白的.本文将对此做出非常详细的讲解. co ...

  6. Javascript 代理模式模拟一个文件同步功能

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  7. JQuery(2)

    JQuery下拉框操作: 取值赋值操作 body代码: <select id="sel"> <option value="北京">北京& ...

  8. 手把手教你做个人 app

    我们都知道,开发一个app很大程度依赖服务端:服务端提供接口数据,然后我们展示:另外,开发一个app,还需要美工协助切图.没了接口,没了美工,app似乎只能做成单机版或工具类app,真的是这样的吗?先 ...

  9. Xamarin中使用DatePickerDialog的相关问题

    在Xamarin中在使用Datepicker的时候,一般情况下只需要在对应的按钮或其他控件的点击事件中使用如下语句即可完成: EditText etBirthday = FindViewById< ...

  10. mysql集群(主从)

    本文主要记录mysql 主从配置. 经典的原理图 0.环境: 采用阿里云ECS服务器,同区同配置,操作系统为ubuntus 14 64位,服务器如下: 服务器A: 内网IP: 10.44.94.219 ...