谈如何解析Html并抓取数据

最近加入了一家新公司,他们是一家电商,业务是网上虚拟充值,我进去是做OA里面的财务,
本来想到的是做一做信息管理的,没想到还涉及到去别的网站采集数据(解析Html,
最终用采集到的数据生成财务凭证)这一环,这个是我从未接触过的领域,
大致看了一下,目的也就是解析网页的HTML从中找出需要的数据。
那么问题来了,该怎样找到这些信息?

由于实质就是在一堆文本里面“挖出”你要的东西,比如网页里面的Title的文本,
很多人自然的会想到正则表达式,呵呵,这个不是不行,而是太费劲了。想想看,
HTML的实质是什么?不就是一堆标签嘛,再往深了想,它就是XML的子集,
XML是可以用XPath还可以用Linq To XML。起初我就想,看有没有Linq To HTML的实现,
还真让我找到一个。用天朝的Baidu搜到的,真不容易,
点这里
看看资料,真的很少,说明并不多,没敢用。
在网上流传最多的解析HTML的库是一个叫Html Agility Pack的东西,
并用它还可以使用Nuget方便的引用到项目中去,真是太省心了!官网源码

看了Html Agility Pack的简单介绍,它是用XPath的语法去检索HTML元素的,这样已经算够方便了吧?还不够好!比如我要找一个Div,我只能通过索引找,如html/body/div[4],不爽吧?感觉还是不够灵活,经过一番搜索,又找到了一个好东西ScrapySharp,看看它是如何检索HTML元素的

ScrapingBrowser browser = new ScrapingBrowser();

//set UseDefaultCookiesParser as false if a website returns invalid cookies format
//browser.UseDefaultCookiesParser = false;

WebPage homePage = browser.NavigateToPage(new Uri("http://www.bing.com/"));

PageWebForm form = homePage.FindFormById("sb_form");
form["q"] = "scrapysharp";
form.Method = HttpVerb.Get;
WebPage resultsPage = form.Submit();

HtmlNode[] resultsLinks = resultsPage.Html.CssSelect("div.sb_tlst h3 a").ToArray();

WebPage blogPage = resultsPage.FindLinks(By.Text("romcyber blog | Just another WordPress site")).Single().Click()

再看一段

using System.Linq;
using HtmlAgilityPack;
using ScrapySharp.Extensions;

class Example
{
    public void Main()
    {
        var divs = html.CssSelect(“div”);  //all div elements
        var nodes = html.CssSelect(“div.content”); //all div elements with css classcontent
        var nodes = html.CssSelect(“div.widget.monthlist”); //all div elements with the both css class
        var nodes = html.CssSelect(“#postPaging”); //all HTML elements with the id postPaging
        var nodes = html.CssSelect(“div#postPaging.testClass”); // all HTML elements with the id postPaging and css class testClass

        var nodes = html.CssSelect(“div.content > p.para”); //p elements who are direct children of div elements with css classcontent

        var nodes = html.CssSelect(“input[type=text].login”); // textbox with css class login
    }
}

这不就是CSS选择器吗?乖乖,把Jquery那一套学着了,必须赞一个啊~!
我也找到一篇HTML Agility Pack 搭配 ScrapySharp,彻底解除Html解析的痛苦
两个一配合着用,如虎添翼~!

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值