http://www.jb51.net/article/9499.htm

通过程序自动的读取其它网站网页显示的信息,类似于爬虫程序。比方说我们有一个系统,要提取BaiDu网站上歌曲搜索排名。分析系统在根据得到的数据进行数据分析。为业务提供参考数据。
  为了完成以上的需求,我们就需要模拟浏览器浏览网页,得到页面的数据在进行分析,最后把分析的结构,即整理好的数据写入数据库。那么我们的思路就是:
  1、发送HttpRequest请求。
  2、接收HttpResponse返回的结果。得到特定页面的html源文件。
  3、取出包含数据的那一部分源码。
  4、根据html源码生成HtmlDocument,循环取出数据。
  5、写入数据库。 
程序如下:  

//根据Url地址得到网页的html源码
         private string GetWebContent(string Url)
         {
             string strResult="";
             try
             {
                 HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url);
    //声明一个HttpWebRequest请求
                 request.Timeout = 30000;
                //设置连接超时时间
                 request.Headers.Set("Pragma", "no-cache");
                 HttpWebResponse response = (HttpWebResponse)request.GetResponse();
                 Stream streamReceive = response.GetResponseStream();
                 Encoding encoding = Encoding.GetEncoding("GB2312");
                 StreamReader streamReader = new StreamReader(streamReceive, encoding);
                 strResult = streamReader.ReadToEnd();
             }
             catch
             {
                 MessageBox.Show("出错");
             }
             return strResult;
         }
为了使用HttpWebRequest和HttpWebResponse,需填名字空间引用
  using System.Net;

以下是程序具体实现过程:
private void button1_Click(object sender, EventArgs e)
         {
            //要抓取的URL地址
             string Url = "http://list.mp3.baidu.com/topso/mp3topsong.html?id=1#top2";

//得到指定Url的源码
   string strWebContent = GetWebContent(Url);

richTextBox1.Text = strWebContent;
    //取出和数据有关的那段源码
             int iBodyStart = strWebContent.IndexOf("<body", 0);
             int iStart = strWebContent.IndexOf("歌曲TOP500", iBodyStart);
             int iTableStart = strWebContent.IndexOf("<table", iStart);
             int iTableEnd = strWebContent.IndexOf("</table>", iTableStart);
             string strWeb = strWebContent.Substring(iTableStart, iTableEnd - iTableStart + 8);

//生成HtmlDocument
   WebBrowser webb = new WebBrowser();
             webb.Navigate("about:blank");
             HtmlDocument htmldoc = webb.Document.OpenNew(true);
             htmldoc.Write(strWeb);
             HtmlElementCollection htmlTR = htmldoc.GetElementsByTagName("TR");
             foreach (HtmlElement tr in htmlTR)
             {
                 string strID = tr.GetElementsByTagName("TD")[0].InnerText;
                 string strName = SplitName(tr.GetElementsByTagName("TD")[1].InnerText, "MusicName");
                 string strSinger = SplitName(tr.GetElementsByTagName("TD")[1].InnerText, "Singer");
                 strID = strID.Replace(".", "");
                //插入DataTable
                 AddLine(strID, strName, strSinger,"0");

string strID1 = tr.GetElementsByTagName("TD")[2].InnerText;
                 string strName1 = SplitName(tr.GetElementsByTagName("TD")[3].InnerText, "MusicName");
                 string strSinger1 = SplitName(tr.GetElementsByTagName("TD")[3].InnerText, "Singer");
                //插入DataTable
                 strID1 = strID1.Replace(".", "");
                 AddLine(strID1, strName1, strSinger1,"0");

string strID2 = tr.GetElementsByTagName("TD")[4].InnerText;
                 string strName2 = SplitName(tr.GetElementsByTagName("TD")[5].InnerText, "MusicName");
                 string strSinger2 = SplitName(tr.GetElementsByTagName("TD")[5].InnerText, "Singer");
                //插入DataTable
                 strID2 = strID2.Replace(".", "");
                 AddLine(strID2, strName2, strSinger2,"0");

}
            //插入数据库
             InsertData(dt);
   
             dataGridView1.DataSource = dt.DefaultView;
}

C#实现通过程序自动抓取远程Web网页信息的代码的更多相关文章

  1. C#抓取远程Web网页信息的代码

    来自:http://www.jb51.net/article/9499.htm 通过程序自动的读取其它网站网页显示的信息,类似于爬虫程序.比方说我们有一个系统,要提取BaiDu网站上歌曲搜索排名.分析 ...

  2. 【VIP视频网站项目】VIP视频网站项目v1.0.3版本发布啦(程序一键安装+电影后台自动抓取+代码结构调整)

    在线体验地址:http://vip.52tech.tech/ GIthub源码:https://github.com/xiugangzhang/vip.github.io 项目预览 主页面 登录页面 ...

  3. 使用 Intel GPA 与 分析3D程序和抓取模型

    原文链接在这里 http://dev.cra0kalo.com/?p=213 背景信息 Intel的GPA本身是一款图形分析软件,并没有设计从3D程序里抓取模型资源的功能,但这里作者是通过hook G ...

  4. APP自动化框架LazyAndroid使用手册(2)--元素自动抓取

    作者:黄书力 概述 前面的一篇博文简要介绍了安卓自动化测试框架LazyAndroid的组成结构和基本功能,本文将详细描述此框架中元素自动抓取工具lazy-uiautomaterviewer的使用方法. ...

  5. 学习笔记CB010:递归神经网络、LSTM、自动抓取字幕

    递归神经网络可存储记忆神经网络,LSTM是其中一种,在NLP领域应用效果不错. 递归神经网络(RNN),时间递归神经网络(recurrent neural network),结构递归神经网络(recu ...

  6. 【转载】ASP.NET以Post方式抓取远程网页内容类似爬虫功能

    使用HttpWebRequest等Http相关类,可以在应用程序中或者网站中模拟浏览器发送Post请求,在请求带入相应的Post参数值,而后请求回远程网页信息.实现这一功能也很简单,主要是依靠Http ...

  7. 下载远程(第三方服务器)文件、图片,保存到本地(服务器)的方法、保存抓取远程文件、图片 将图片的二进制字节字符串在HTML页面以图片形式输出 asp.net 文件 操作方法

    下载远程(第三方服务器)文件.图片,保存到本地(服务器)的方法.保存抓取远程文件.图片   将一台服务器的文件.图片,保存(下载)到另外一台服务器进行保存的方法: 1 #region 图片下载 2 3 ...

  8. PHP抓取远程图片教程(包含不带后缀图片)

    之前做微信登录开发时候,发现微信头像图片没有后缀名,传统的图片抓取方式不奏效,需要特殊的抓取处理.所以,后来将各种情况结合起来,封装成一个类,分享出来. 创建项目 作为演示,我们在www根目录创建项目 ...

  9. 巧用Grafana和Arthas自动抓取K8S中异常Java进程的线程堆栈

    前言 近期发现业务高峰期时刻会出现CPU繁忙导致的timeout异常,通过监控来看是因为Node上面的一些Pod突发抢占了大量CPU导致的. 问: 没有限制CPU吗?是不是限制的CPU使用值就可以解决 ...

随机推荐

  1. *.location.href 用法:

    *.location.href 用法: top.location.href=”url”          在顶层页面打开url(跳出框架) self.location.href=”url”       ...

  2. Datagrid数据导出到excel文件的三种方法

    原文连接: http://www.cnblogs.com/xieduo/articles/606202.html 一.文件保存在服务器,提供下载 方法一:导出到csv文件,存放在服务器端任一路径,然后 ...

  3. Bolts-Android

    对Android客户端编程来说,有个明确的规则是不能在ui线程里面做耗时的操作.这样就要求网络请求.文件读写等等操作都要异步操作.而异步操作完成后,往往需要再更新ui界面.最直接的想法是回调,只要保证 ...

  4. WindowsPhone8解锁提示IpOverUsbSvc问题

    问题如图: 一般都是系统未启动或者未安装该服务. 1.使用sc命令查询是否存在IpOverUsbSvc服务 Cmd执行Sc query IpOverUsbSvc 结果如下,如果可以找到服务,state ...

  5. js中的预加载与懒加载(延迟加载)

    js中加载分两种:预加载与延迟加载 一.  预加载,增强用户的体验,但会加载服务器的负担.一般会使用多种 CSS(background).JS(Image).HTML(<img />) . ...

  6. memcached 介绍

    博客园相关文章功能中使用了memcached,在网上搜集了一些memcached方面的文章: memcached完全剖析 分布式缓存系统Memcached简介与实践 Memcached深度分析 自己实 ...

  7. 实验楼实验——LINUX基础入门

    第一节 Linux简介 一.Linux的历史: 1965 年,Bell 实验室.MIT.GE(通用电气公司)准备开发 Multics 系统,为了同时支持 300 个终端访问主机,但是 1969 年失败 ...

  8. 20145222黄亚奇《Java程序设计》第6周学习总结

    教材学习内容总结 第十章 Java将输入/输出抽象化为串流,数据有来源及目的地,衔接两者的是串流对象. 从应用程序角度来看,如果要将数据从来源取出,可以使用输入串流,如果要将数据写入目的地,可以使用输 ...

  9. CS:APP2e Y86处理器模拟器∗指南

    CS:APP2e Y86处理器模拟器∗指南 Randal E.Bryant David R. O'Hallaron 2013年7月29日 本文档描述了处理器模拟器,伴随的表示在第4章Y86处理器架构的 ...

  10. 学习笔记——Maven settings.xml 配置详解

    文件存放位置 全局配置: ${M2_HOME}/conf/settings.xml 用户配置: ${user.home}/.m2/settings.xml note:用户配置优先于全局配置.${use ...