使用ScrapySharp快速从网页中采集数据
ScrapySharp是一个帮助我们快速实现网页数据采集的库,它主要提供了如下两个功能
- 从Url获取Html数据
- 提供CSS选择器的方式解析Html节点
安装:
ScrapySharp可以直接从Nuget上下载,直接从Package Console里面输入如下命令即可:
PM> Install-Package ScrapySharp
Html下载
首先我们来看看它的Html下载功能,它是通过ScrapingBrowser类来实现的:
var browser = new ScrapingBrowser();
var html = browser.DownloadString(new
Uri("http://www.cnblogs.com/"));
这个只是一个简单的示例,实际上ScrapingBrowser的功能还是非常全面的,常见的功能如:Charset探测,AutoRedirect、Cache、 Proxy、Cookie、UserAgent、表单提交等都支持得非常好,用它来获取网页比HttClient要方便很多。
Html解析
ScrapySharp的Html解析是基于大名鼎鼎的HtmlAgilityPack来实现的,它主要提供了两个扩展函数CssSelect和CssSelect:
static
IEnumerable<HtmlNode> CssSelect(this
HtmlNode node, string expression);
static
IEnumerable<HtmlNode> CssSelect(this
IEnumerable<HtmlNode> nodes, string expression);
static
IEnumerable<HtmlNode> CssSelectAncestors(this
HtmlNode node, string expression);
static
IEnumerable<HtmlNode> CssSelectAncestors(this
IEnumerable<HtmlNode> nodes, string expression);
相比HtmlAgilityPack提供的层级式解析和Xpath方式的解析比起来,CSS选择器的更为简单快捷,这里以解析博客园的首页标题为例,首先用开发者工具定位标题,可以看到其HTML结构的方式如下:

解析的代码如下:
var doc = new
HtmlDocument();
doc.LoadHtml(html);
var docNode = doc.DocumentNode;
var nodes = docNode.CssSelect(".titlelnk");
foreach (var htmlNode in nodes)
{
Console.WriteLine(htmlNode.InnerText);
}
其中关键代码只有docNode.CssSelect(".titlelnk")一句,非常简洁。另外,由于CSS方式比较灵活,如下方式也能获取到标题
var nodes = docNode.CssSelect(".post_item_body > h3");
var nodes = docNode.CssSelect("div#post_list").CssSelectAncestors("h3");
最后,列举一下常用的CSS查询,以方便后续的使用:
html.CssSelect("div"); //all div elements
html.CssSelect("div.content"); //all div elements with css class 'content'
html.CssSelect("div.widget.monthlist"); //all div elements with the both css class
html.CssSelect("#postPaging"); //all HTML elements with the id postPaging
html.CssSelect("div#postPaging.testClass"); // all HTML elements with the id postPaging and css class testClass
html.CssSelect("div.content > p.para"); //p elements who are direct children of div elements with css class 'content'
html.CssSelect("input[type = text].login"); // textbox with css class login
更多的CSS选择器使用方法可以参看W3的网页:CSS 选择器参考手册
使用ScrapySharp快速从网页中采集数据的更多相关文章
- Web网页中动态数据区域的识别与抽取 Dynamical Data Regions Identification and Extraction in Web Pages
Web网页中动态数据区域的识别与抽取 Dynamical Data Regions Identification and Extraction in Web Pages Web网页中动态数据区域的识别 ...
- 网页中的数据的4个处理方式:CRUD(Creat, Retrive, Update, Delete)
网页中的数据的4个处理方式:CRUD(Creat, Retrive, Update, Delete) 2018-12-21, 后续完善
- 使用Xpath从网页中获取数据
/// <summary> /// 从官方网站中抓取产品信息存放在本地数据库中 /// </summary> /// <returns></returns&g ...
- 使用 CSS 选择器从网页中提取数据
在 R 中,关于网络爬虫最简单易用的扩展包是 rvest.运行以下代码从 CRAN 上安装:install.packages("rvest")首先,加载包并用 read_html( ...
- 【转载】使用 gnuplot 在网页中显示数据
来源:http://www.ibm.com/developerworks/cn/aix/library/au-gnuplot/ 简介 gnuplot 是一个用于生成趋势图和其他图形的工具.它通常用于收 ...
- PHP 爬取网页中表格数据
public function spider_j($page) { $url="http://aaa/bbb".$page."_0/"; $fcontents= ...
- 通过spark-sql快速读取hive中的数据
1 配置并启动 1.1 创建并配置hive-site.xml 在运行Spark SQL CLI中需要使用到Hive Metastore,故需要在Spark中添加其uris.具体方法是将HIVE_CON ...
- Asp.net网页中DataGridView数据导出到Excel
经过上网找资料,终于找到一种可以直接将GridView中数据导出到Excel文件的方法,归纳方法如下: 1. 注:其中的字符集格式若改为“GB2312”,导出的部分数据可能为乱码: 导出之前需要关闭分 ...
- css注入获取网页中的数据
<style><?php echo htmlspecialchars($_GET['x']);?></style> <br><br>< ...
随机推荐
- Linux是对用户的密码的复杂度要求设置【转】
那么Linux是如何实现对用户的密码的复杂度的检查的呢?其实系统对密码的控制是有两部分组成: 1 cracklib 2 /etc/login.defs pam_cracklib.so 才是控制密码复杂 ...
- Linux /etc/cron.d作用(转自 定时任务crontab cron.d)
原文链接:http://huangfuligang.blog.51cto.com/9181639/1608549 一.cron.d增加定时任务 当我们要增加全局性的计划任务时,一种方式是直接修改/et ...
- (MHA+MYSQL-5.7增强半同步)高可用架构设计与实现
架构使用mysql5.7版本基于GTD增强半同步并行复制配置 reploication 一主两从,使用MHA套件管理整个复制架构,实现故障自动切换高可用 优势: ...
- 小程序授权怎么写 , 用户点击取消授权 调用 wx.authorize
点击获取授权 onLoad: function (options) { console.log("onLoad====="); var that=this; wx.getUserI ...
- selector函数指针回调机制
selector可以叫做选择器,其实指的就是对象的方法,也可以理解为C语言里面的函数指针,在面向对象里面的对应概念. [self performSelector:@selector(Hidden) w ...
- LoadRunner中常用的字符串操作函数
LoadRunner中常用的字符串操作函数有: strcpy(destination_string, source_string); strc ...
- 高版本 eclipse 如何安装 fatjar 插件以及使用 fatjar 将 Java 程序打成 Jar 包
高版本 eclipse 如何安装 fatjar 插件以及使用 fatjar 将 Java 程序打成 Jar 包 Eclipse Version: Neon.3 Release (4.6.3) Welc ...
- PHP之数组(遍历顺序)
作者: Laruence( ) 本文地址: http://www.laruence.com/2009/08/23/1065.html PHP的数组, 如果用foreach来访问, 遍历的顺序是固定 ...
- SQL Server 执行计划分析
当一个查询到达数据库引擎时,SQL Server执行两个主要的步骤来产生期望的查询结果: 第一步:查询编译,生成查询计划. 第二步:执行这个查询计划. 1. 用于演示分析执行计划的查询语句 /* 查询 ...
- vue 阻止事件冒泡
<mt-button type="danger" size="small" @click="cancelOrderInfo(this.even ...