在通过:

了解了抓取网页的一般流程之后,加上之前介绍的:

应该就很清楚如何利用工具去抓取网页,并分析源码,获得所需内容了。

下面,就来通过实际的例子来介绍,如何通过Python语言,实现这个抓取网页并提取所需内容的过程:

假设我们的需求是,从我(crifan)的Songtaste上的页面:

先抓取网页的html源码,然后再提取其中我的songtaste上面的名字:crifan

对应的html代码为:

crifan

此任务,相对很简单。下面就来说说,如何用C#来实现。

新建一个C#项目,使用.NET Framework 2.0,设置一些基本的控件用于显示。

相关的,先写出,获得html的代码:using System.Net;

using System.IO;

//step1: get html from url

//http://www.songtaste.com/user/351979/

string urlToCrawl = txbUrlToCrawl.Text;

//generate http request

HttpWebRequest req = (HttpWebRequest)WebRequest.Create(urlToCrawl);

//use GET method to get url's html

req.Method = "GET";

//use request to get response

HttpWebResponse resp = (HttpWebResponse)req.GetResponse();

string htmlCharset = "GBK";

//use songtaste's html's charset GB2312 to decode html

//otherwise will return messy code

Encoding htmlEncoding = Encoding.GetEncoding(htmlCharset);

StreamReader sr = new StreamReader(resp.GetResponseStream(), htmlEncoding);

//read out the returned html

string respHtml = sr.ReadToEnd();

rtbExtractedHtml.Text = respHtml;

对应的,UI中,点击按钮“抓取网页html源码”:

可以获得对应的html了:

注意:

此处,需要根据你的需要,而决定是否关心html的编码类型(charset);

以及,此处为何使用GBK的编码,不了解的均可参考:

然后获得了html之后,再去通过C#中的正则表达式库函数,Regex,去提取出我们想要的数据:using System.Text.RegularExpressions;

//step2: extract expected info

//

crifan

string h1userP = @"

(?.+?)

";

Match foundH1user = (new Regex(h1userP)).Match(rtbExtractedHtml.Text);

if (foundH1user.Success)

{

//extracted the expected h1user's value

txbExtractedInfo.Text = foundH1user.Groups["h1user"].Value;

}

else

{

txbExtractedInfo.Text = "Not found h1 user !";

}

点击“提取所需的信息”,即可提取出我们要的h1user的值crifan:

对应的完整的C#代码为:using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Text;

using System.Windows.Forms;

using System.Net;

using System.IO;

using System.Text.RegularExpressions;

namespace crawlWebsiteAndExtractInfo

{

public partial class frmCrawlWebsite : Form

{

public frmCrawlWebsite()

{

InitializeComponent();

}

private void btnCrawlAndExtract_Click(object sender, EventArgs e)

{

//step1: get html from url

//http://www.songtaste.com/user/351979/

string urlToCrawl = txbUrlToCrawl.Text;

//generate http request

HttpWebRequest req = (HttpWebRequest)WebRequest.Create(urlToCrawl);

//use GET method to get url's html

req.Method = "GET";

//use request to get response

HttpWebResponse resp = (HttpWebResponse)req.GetResponse();

string htmlCharset = "GBK";

//use songtaste's html's charset GB2312 to decode html

//otherwise will return messy code

Encoding htmlEncoding = Encoding.GetEncoding(htmlCharset);

StreamReader sr = new StreamReader(resp.GetResponseStream(), htmlEncoding);

//read out the returned html

string respHtml = sr.ReadToEnd();

rtbExtractedHtml.Text = respHtml;

}

private void btnExtractInfo_Click(object sender, EventArgs e)

{

//step2: extract expected info

//

crifan

string h1userP = @"

(?.+?)

";

Match foundH1user = (new Regex(h1userP)).Match(rtbExtractedHtml.Text);

if (foundH1user.Success)

{

//extracted the expected h1user's value

txbExtractedInfo.Text = foundH1user.Groups["h1user"].Value;

}

else

{

txbExtractedInfo.Text = "Not found h1 user !";

}

}

private void lklTutorialUrl_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)

{

string tutorialUrl = "https://www.crifan.com/crawl_website_html_and_extract_info_using_csharp";

System.Diagnostics.Process.Start(tutorialUrl);

}

}

}

完整的VS2010的项目,可以去这里下载:

【总结】

总的来说,使用C#抓取网站,从返回的html源码中提取所需内容,相对之前的Python,还是要复杂一些的。

因为要手动处理很多和http相关的request,response,以及stream,编码类型等内容。

c 中html抓取页面图片,【教程】抓取网并提取网页中所需要的信息 之 C#版相关推荐

  1. html抓取网址某链接,URL 筛选小工具 提取网页中的链接地址

    http://blog.360dseo.com/html/826.html 作者: 不详 发布时间:2014-4-23 16:46:19 这个VBS是用来将一个本地网页中的URL筛选出来并保存在新的网 ...

  2. php 抓取页面图片,php 抓取网页内容与图片的方法

    这篇文章主要介绍了关于php 抓取网页内容与图片的方法,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下 例子1:<?php include_once("curl.php& ...

  3. php提取网页mp3,怎么提取网页中的音乐|下载网页中的音乐 网页音乐提取工具及使用教程分享...

    相信很多人都比较了解怎么下载网页上的视频吧,那么现在怎么提取网页中的音乐或者说怎么下载网页中的音乐 ,嗯~ o(* ̄▽ ̄*)o ,不懂的孩纸,路过走过不要错过啦,快来看看小编分享的网页音乐提取工具及使 ...

  4. Delphi提取网页中的图片

    无意中,在csdn论坛中看到关于"提取网页中的图片资源"的帖子,特摘抄之. simonhehe提供相关代码如下: procedure TfrmMain.DomImg2Image(w ...

  5. HtmlParser提取网页中的纯文本信息

    转载自   HtmlParser提取网页中的纯文本信息 HTMLParser 一个解析web页面的开源类库.           准备学习下搜索方面的技术,就学习了些网络爬虫的知识.最近一直在一个点上 ...

  6. 一次性提取网页中所有图片的代码

    一次性提取网页中所有图片的代码 打开有图片的网页,在地址栏中输入: javascript:Ai7Mg6P='';for%20(i7M1bQz=0;i7M1bQz<document.images. ...

  7. 利用正则表达式提取网页中Table内的数据

    利用正则表达式提取网页中Table内的数据 using System; using System.Collections.Generic; using System.Linq; using Syste ...

  8. 如何提取网页中的blob加密视频

    如何提取网页中的blob加密视频 一.场景 一些网站的视频为了防止下载,通常会采用blob加密的做法,打开浏览器控制台F12后,是这样的: 视频网址:"blob:https://us.flu ...

  9. 正则表达式提取网页中的网址

    正则表达式提取网页中的网址,并用匿名函数 #coding=utf-8 import res="https://www.baidu.com/message.asp?id=35" re ...

最新文章

  1. 可可肉的奋斗(第一天)2012-12-24
  2. 4.1 Qt绘图原理
  3. Ant Design(ui框架)
  4. Centos实现svn本地认证apache认证
  5. python处理ncdc气象数据并利用arcgis可视化
  6. Java之Set接口
  7. 基于界面自动化测试框架的发展
  8. Tell me why -- Declan Galbraith
  9. null value in entry: destinationDir=null
  10. jQuery设置文本框回车事件
  11. colmap 稀疏重建输出的cameras.txt, images.txt,points3D.txt含义
  12. 计算机考研计算机网络题库
  13. Useful webs
  14. Mac流程图制作工具推荐——Diagrams
  15. 记一次被QQ邮箱钓鱼邮件事件
  16. P35-前端基础-新闻列表
  17. 分光器尺寸及光损耗计算
  18. C语言实现求n的阶乘(n!),阶乘的和。
  19. win10计算机管理器在哪,Windows10开启服务管理器图文教程|Win10系统服务管理器在哪...
  20. osgearth加载本地离线影像瓦片地图

热门文章

  1. Bash脚本和/ bin / bash ^ M:错误的解释器:没有这样的文件或目录[重复]
  2. 用argparse解析布尔值
  3. 我正在运行哪个版本的PostgreSQL?
  4. Java的“ for each”循环如何工作?
  5. 利用ros3d.js实现 turtlebot3 在web 端显示并导航
  6. MyBatis的懒加载(延迟加载)
  7. c++ opencv实现区域填充_利用opencv之为图像添加边框
  8. php 命令设计模式示例,php设计模式(十九)命令模式-Fun言
  9. eas报错日记_(FAQ)EAS服务启动失败[金蝶EAS]
  10. 使用IDEA创建Maven项目教程