怎样抓取网页数据( WebClient常用语法以及HtmlAgilityPack常用方法1. )

优采云 发布时间: 2022-04-03 01:10

  怎样抓取网页数据(

WebClient常用语法以及HtmlAgilityPack常用方法1.

)

  

  网络客户端

  说完概念,我们还是要回到实际应用。对于上一章的新浪新闻请求url,我们需要使用开发者工具监控是POST还是GET请求,一般是这两种,然后判断参数和返回类型,编码类型一般为UTF-8 ,具体操作如下

  

  确定请求方法、返回类型和参数

  下面是在C#程序中请求文章列表的结果:

  

  请求获取文章列表数据

  上一篇文章我们分析了文章的URL链接,同理可以得到新闻详情的html

  

  获取新闻内容html

  二、XPath,强大的网页分析工具

  在上一步中,我们得到了新闻内容,然后我们需要对内容进行解析以找到我们想要的内容。这里我们可以使用开发者工具快速定位新闻内容所在的html标签。如何获取此标签中的内容?这也依赖于开发人员工具的“复制 XPath”功能。

  

  复制 XPath

  复制出来的文本“//*[@id="artibody"]”是一个XPath表达式,可以定位到文章的内容,那么我们就很容易理解XPath是什么了。标记内容的语法或表达式。不懂XPath的同学可以自行百度。在文章的最后会附上一些常用的用法。欢迎讨论和学习。

  三、HTML解析类库的HtmlAgilityPack

  那么有了XPath表达式,在程序中如何使用呢?另一个伟大的工具出现了“HtmlAgilityPack”。它可以通过 C# 中的 Nuget 安装。它最大的作用就是解析html,比正则表达式更快更准确!HtmlAgilityPack 中常用的类有 HtmlDocument、HtmlNode采集、HtmlNode 和 HtmlWeb。废话不多说,看新闻的主题内容如何获取。根据 网站,您可以添加和删除不必要的备注和脚本。

  

  使用 XPath 获取新闻内容

  你真的可以做任何你想做的事情来获取新闻内容。可以以文本形式保存,也可以保存到数据库中自己做新闻浏览网站等等。

  四、XPath 常用语法和 HtmlAgilityPack 常用方法

  XPath

  1. 根据id选择://*[@id="xxx"]

  2. 根据类选择://*[@class="xxx"]

  3. 获取页面上所有的 a/p/span... 标签:a/p/span...

  4. 根据title属性值获取元素://title[@lang='eng']

  5. 选择标签下的div/p/span标签://*[@id="xxx"]/div[1]/span/p

  6. 用文本节点值中的cn字符串查询title节点://title[contains(text,'cn')]

  7. 不收录数据属性的标题节点:title[not(@data)]

  8. 统计title节点的个数:count(//title)

  9. 在js中查询一个变量值://script[contains(text(), 'variable name')]

  10. 当前节点的父节点:./parent::* etc...

  HtmlAgilityPack

  1. 加载 html:LoadHtml(strHtml) 或 HmlWeb().Load(url)

  2. HtmlNode 获取标签属性:Attribute["Attribute name"].Value

  3. HtmlNode 获取标签 html: xxx.InnerHtml

  4. HtmlNode 获取标签html的文本:xxx.InnerText

  5. 获取单个标签,返回HtmlNode:SelectSingleNode

  6. 获取标签集合,返回 HtmlNode采集: SelectNodes

  7. 获取子节点(包括文本节点)的集合:ChildNodes

  8. 获取下一个兄弟节点:NextSibling

  9. 获取节点的父节点:ParentNode

  10. 获取上一个兄弟:PreviousSibling 等...

  以上是作者在编写爬虫时经常用到的XPath,还有很多其他的就不一一列举了。有熟悉的大神可以在评论中分享。

  

  XPath 解析网页

  五、总结一下

  通过上面的介绍,我们已经了解了大致的流程,可以总结为:模拟网络请求-->开发者工具复制XPath-->HtmlAgilityPack解析网页内容-->获取数据,为所欲为想!

  今天的分享到此结束。有很多缺点。欢迎您给我们留言和指正。让我们一起交流,一起进步!

  准备工作已经完成,下一章就是实战项目了!

  我是隔壁老王,爱编程爱学习~~

  

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线