码迷,mamicode.com
首页 > Web开发 > 详细

谈如何解析Html并抓取数据

时间:2019-01-23 20:29:54      阅读:203      评论:0      收藏:0      [点我收藏+]

标签:coff   post   avr   The   proc   简单介绍   标签   path   star   

最近加入了一家新公司,他们是一家电商,业务是网上虚拟充值,我进去是做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()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

再看一段

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
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

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

再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow

谈如何解析Html并抓取数据

标签:coff   post   avr   The   proc   简单介绍   标签   path   star   

原文地址:https://www.cnblogs.com/swdhywhd/p/10311107.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!