使用C#进行网页抓取的指南

网页抓取是一种从网页中提取数据的技术,对于开发者和非开发者来说都非常有用。本文将介绍如何使用C#来构建一个点选式的网页抓取/爬虫引擎。

从事网页抓取已有一段时间,通常都是手工进行。市面上有一些商业工具提供了快速简便的方法来从网页上提取数据,这些工具通常是通过点选操作来实现的。这不仅为开发者节省了时间,也方便了那些需要从网页上获取数据但并非开发者的用户。本文将简要介绍构建此类引擎所需的组件,并展示构建点选式网页抓取/爬虫引擎的一些技术。

点选式引擎

构建大多数东西通常需要一部分脑力劳动和连接点,以及一部分站在前人肩膀上的工作——这个项目也不例外。

首先,需要有一种方法来动态地在浏览器中选择/识别包含想要抓取的数据的HTML元素。这通常是通过浏览器扩展/插件来实现的。

例如,'Selector Gadget'就是一个很好的例子。要获取像Kimono截图中那样的重复元素,只需要查看选中的元素,然后查看其父元素/兄弟元素的模式,然后进行猜测(让用户在过程中进行更正)。在这个例子中,可以看到在浏览器中点击了一篇文章的标题,代码就自动选择了它认为的其他文章标题。

上述概念在页面上想要抓取的其他字段/数据块上重复,并保存到模板中。知道要抓取什么的关键,是要获取想要抓取的元素的XPath。这有时可能会有点复杂,但从长远来看是值得的。了解更多关于XPath的信息,请参考。

一旦有了XPath,就可以使用在中展示的技术,使用CSS选择查询来抓取数据。

以下图表展示了如何将模板存储在XML中,例如,抓取上面的'div' 'title'。

WebPage PageResult = Browser.NavigateToPage( new Uri( XML.url )); var Titles = PageResult.Html.SelectNodes( XML.elements.element[n].xpath )

需要告诉引擎如何访问数据所在的页面以及页面上的数据。这与步骤1中的选择不同。在这里指的是将数据带到页面上的东西——比如说有100篇文章,但页面一次只显示30篇。在这种情况下,需要让引擎知道它需要:

  • 转到页面
  • 找到元素,抓取
  • 转到下一页(以及如何做到这一点)
  • 重复,直到最后一页

要实现这一点,需要让引擎知道如何导航,这涉及到为分页数据识别:

  • 起始页
  • 结束页
  • 每页行数
  • 上一页/下一页链接

这个谜题的最后一部分是将所有内容整合在一起,这样就可以点选想要抓取的内容,然后定期进行抓取。根据需求,以下是一些有用的工具,可能会帮助:

  • Quartz .net scheduler
  • JQuery-cron builder

Quartz .net scheduler是一个非常强大的定时器/调度框架。它被广泛使用,易于实现,并且比滥用无处不在的timer类要好得多。可以实现非常简单的计划,比如“每周二”,“一次,在这个特定时间”,或者使用内置的CRON触发方法来实现相当复杂的计划。

以下是一些示例:

  • 0 15 10 ? * * - 每天上午10:15触发
  • 0 0/5 14 * * ? - 每天下午2点开始,每5分钟触发一次,直到2:55,每天
  • 0 15 10 ? * 6L 2002-2005 - 在2002年、2003年、2004年和2005年的每个月的最后一个星期五上午10:15触发

非常强大的功能!

如果用户界面在Web上,这个JQuery插件可能会很有用。它为用户提供了一个简单的界面来生成/选择计划时间,而不需要知道如何使用cron!

最后一步的工作就是简单地执行一个抓取过程,针对存储的模板,在预定的计划时间进行。快速启动并运行基本功能很容易——乐趣开始于需要构建它的时候。敬请期待。

本文介绍了网页抓取的基础知识,应该足以让开始编码了!下一次更新将提供一些可以实施和构建的工作代码。

所以请记住:

  • 选择模板
  • 识别抓取流程
  • 定时和抓取!
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485