使用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解析

ScrapySharpHtml解析是基于大名鼎鼎的HtmlAgilityPack来实现的,它主要提供了两个扩展函数CssSelectCssSelect

    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 选择器参考手册

没有整理与归纳的知识,一文不值!高度概括与梳理的知识,才是自己真正的知识与技能。 永远不要让自己的自由、好奇、充满创造力的想法被现实的框架所束缚,让创造力自由成长吧! 多花时间,关心他(她)人,正如别人所关心你的。理想的腾飞与实现,没有别人的支持与帮助,是万万不能的。







    本文转自wenglabs博客园博客,原文链接:http://www.cnblogs.com/arxive/p/7075306.html ,如需转载请自行联系原作者


相关文章
|
数据采集 监控 JavaScript
网站流量日志分析 —数据采集—页面埋点 JavaScript 收集数据|学习笔记
快速学习网站流量日志分析—数据采集—页面埋点 JavaScript 收集数据
453 0
网站流量日志分析 —数据采集—页面埋点 JavaScript 收集数据|学习笔记
|
3月前
|
Prometheus 监控 关系型数据库
|
7月前
|
监控 UED 开发者
通过云拨测对指定网页进行网页性能监测
本实验将通过云拨测对指定服务器进行网页性能监测,评估网站服务质量和用户体验。
205 0
|
监控 开发者
网站流量日志分析背景介绍— 如何进行网站分析--内容导航分析|学习笔记
快速学习网站流量日志分析背景介绍—如何进行网站分析--内容导航分析
84 0
网站流量日志分析背景介绍— 如何进行网站分析--内容导航分析|学习笔记
|
存储 数据采集 搜索推荐
多搜索引擎关键词采集域名采集URL采集联系信息采集工具
Msray-plus,是一款采用GO语言开发的企业级综合性爬虫/采集软件。 支持:搜索引擎结果采集、域名采集、URL采集、网址采集、全网域名采集、CMS采集、联系信息采集 支持亿级数据存储、导入、重复判断等。无需使用复杂的命令,提供本地WEB管理后台对软件进行相关操作,功能强大且简单易上手! 1:可从国内外多个搜索引擎批量采集用户导入的关键词对应的搜索结果(SERP数据),并进行结构化数据存储与自定义过滤处理; 2:可从用户提供的url种子地址,源源不断的自动爬取全网网站数据,并进行结构化数据存储与自定义过滤处理; 3:可从用户提供的网站列表数据中,全自动的提取出网站联系方式信息,
多搜索引擎关键词采集域名采集URL采集联系信息采集工具
|
存储 数据采集 搜索推荐
全网搜索引擎采集(msray)|URL采集|关键词采集|域名采集
msray-plus支持搜索引擎结果采集、域名采集、URL采集、网址采集、全网域名采集、CMS采集、联系信息采集
全网搜索引擎采集(msray)|URL采集|关键词采集|域名采集
|
数据采集 搜索推荐 SEO
全网URL采集工具(msray),支持关键词采集,域名采集,联系人采集
全网URL采集工具,支持baidu,sogou,bing,Google,Yandex,Want,神马,DuckDuckGo,等搜索引擎,支持关键词采集,域名采集,URL采集,联系方式采集,手机号采集,qq采集,邮箱采集
全网URL采集工具(msray),支持关键词采集,域名采集,联系人采集
【火车头采集】如何采集一个网页的多张图片并且下载
【火车头采集】如何采集一个网页的多张图片并且下载
106 0
【火车头采集】如何采集一个网页的多张图片并且下载
|
小程序 数据库
小程序评论怎么实时显示数据
小程序评论怎么实时显示数据
303 0
小程序评论怎么实时显示数据
|
Web App开发 前端开发 API