从网页抓取数据(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 解析的痛苦
两者搭配使用,威力更大~!