谈如何解析Html并抓取数据

来源:互联网 发布:英雄联盟tcp端口是多少 编辑:程序博客网 时间:2024/05/16 17:26

最近加入了一家新公司,他们是一家电商,业务是网上虚拟充值,我进去是做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 0
原创粉丝点击