使用ScrapySharp快速从网页中采集数据

转自原文 使用ScrapySharp快速从网页中采集数据

ScrapySharp是一个帮助我们快速实现网页数据采集的库,它主要提供了如下两个功能

  1. 从Url获取Html数据
  2. 提供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 选择器参考手册

时间: 2024-12-20 16:13:16

使用ScrapySharp快速从网页中采集数据的相关文章

【转载】使用 gnuplot 在网页中显示数据

来源:http://www.ibm.com/developerworks/cn/aix/library/au-gnuplot/ 简介 gnuplot 是一个用于生成趋势图和其他图形的工具.它通常用于收集基于时间的数据,但是不限于此:也可以使用静态数据.gnuplot 可以以批模式运行或动态运行,结果由图形查看程序或 Web 浏览器显示.本文演示如何使用 gnuplot 和批文件为从 sar 或其他数据源收集的数据生成图形.gnuplot 有许多命令选项,可以通过 set 操作符使用它们.但是,要

使用Xpath从网页中获取数据

/// <summary> /// 从官方网站中抓取产品信息存放在本地数据库中 /// </summary> /// <returns></returns> public List<ProductMessage> GetlistProductMessage() { string html = GetProductsDescriptionsImage("http://www.grandcanyononepoint.com/products

PHP 爬取网页中表格数据

public function spider_j($page) { $url="http://aaa/bbb".$page."_0/"; $fcontents=file_get_contents($url); $table_data = preg_match_all('#<table>(.*?)</table>#si',$fcontents,$match); $table_data = $match[0][0]; $table_array =

通过spark-sql快速读取hive中的数据

1 配置并启动 1.1 创建并配置hive-site.xml 在运行Spark SQL CLI中需要使用到Hive Metastore,故需要在Spark中添加其uris.具体方法是将HIVE_CONF/hive-site.xml复制到SPARK_CONF目录下,然后在该配置文件中,添加hive.metastore.uris属性,具体如下: <configuration> <property> <name>hive.metastore.uris</name>

python提取网页中json数据

用法示例: 相对于python解析XML来说,我还是比较喜欢json的格式返回,现在一般的api返回都会有json与XML格式的选择,json的解析起来个人觉得相对简单些 先看一个简单的豆瓣的图书查询的api返回 http://api.douban.com/v2/book/isbn/9787218087351 {"rating":{"max":10,"numRaters":79,"average":"9.1"

网页中删除数据弹出提示框

当点击删除时,弹出提示的对话框,点击确定就跳转到处理页面,点击取消不跳转 代码: <!--删除时出现对话框提示--> <!--<a href="delete.php" onclick="return confirm('确定删除吗?');">删除</a>--> 效果:

67.Android中的数据存储总结

转载:http://mp.weixin.qq.com/s?__biz=MzIzMjE1Njg4Mw==&mid=2650117688&idx=1&sn=d6c73f9f04d02ede7a741b45e801d74e#rd 本篇文章会帮助大家快速了解Android中各种数据存储机制的应用场景以及基本使用方法,力求在头脑中建立一个“目录”.有了这个目录,具体使用细节在实际应用时再查询文档即可得到. 0. 概述 Android为我们提供了以下存储机制: Shared Preferenc

如何直接获取网页上的数据到工作表

这个网页上的数据不能复制,如何获取网页中的数据到Excel工作表中呢?(常见问题)如何提取网页上的表格数据怎么利用excel获取网上数据如何实时获取网页上的数据信息[资料来源于网络搜索:王西猛讲师的网络课堂][解决方法,wangqiang博客推荐视频教程] wangqiang博客推荐视频教程 原文地址:http://blog.51cto.com/13172026/2289258

抓取网页中的内容、如何解决乱码问题、如何解决登录问题以及对所采集的数据进行处理显示的过程

本文主要介绍如何抓取网页中的内容.如何解决乱码问题.如何解决登录问题以及对所采集的数据进行处理显示的过程.效果如下所示: 1.下载网页并加载至HtmlAgilityPack 这里主要用WebClient类的DownloadString方法和HtmlAgilityPack中HtmlDocument类LoadHtml方法来实现.主要代码如下. var url = page == 1 ? "http://www.cnblogs.com/" : "http://www.cnblogs