从网页抓取数据(HTML从中的实质是什么?如何找到这些信息?(一))

优采云 发布时间: 2021-09-26 11:18

  从网页抓取数据(HTML从中的实质是什么?如何找到这些信息?(一))

  我最近加入了一家新公司。他们是一家电子商务公司。他们的业务是虚拟在线充值。我进入OA做财务。

  本来想做信息管理的,没想到会涉及到其他网站采集数据(解析Html,

  最后用采集收到的数据生成财务凭证)这个链接,这是我之前没接触过的领域,

  粗略看一下,目的是解析网页的HTML,找到需要的数据。

  那么问题来了,如何找到这些信息呢?

  既然本质是从一堆文字中“挖出”你想要的东西,比如网页中Title的文字,

  很多人自然会想到正则表达式,呵呵,这个还不错,就是太费力了。想一想,

  HTML的本质是什么?不就是一堆标签吗?深入思考,它是 XML 的一个子集。

  XML 可以使用 XPath 或 Linq To XML。一开始想看看有没有Linq To HTML的实现,

  它真的让我找到了一个。天朝的百度也不好找。

  点击这里,

  看资料,真的很少,解释不多,不敢用。

  互联网上最流行的 HTML 解析库是 Html Agility Pack。

  使用Nuget也可以方便的引用到项目中,好省心!官网源码

  阅读 Html Agility Pack 的简要介绍后,它使用 XPath 语法来检索 HTML 元素。这样够方便吗?还不够好!比如我要找一个div,只能通过index来找,比如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()

123456789101112131415

  见另一节

  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 class ‘content’        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 class ‘content’        var nodes = html.CssSelect(“input[type=text].login”); // textbox with css class login    }}

12345678910111213141516171819

  这不是 CSS 选择器吗?乖乖,学了jquery集后,一定喜欢~!

  我还发现了一个带有 ScrapySharp 的 HTML Agility Pack 可以完全缓解 Html 解析的痛苦

  两者搭配使用,威力更大~!

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线