分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > IT知识

谈如何解析Html并抓取数据

发布时间:2023-09-06 02:31责任编辑:胡小海关键词:暂无标签

最近加入了一家新公司,他们是一家电商,业务是网上虚拟充值,我进去是做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 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 ???}}
  • 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并抓取数据

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

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved