c#抓取网页数据(关于前端和网络基础知识,你需要知道的四件事)

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

  c#抓取网页数据(关于前端和网络基础知识,你需要知道的四件事)

  Html Agility Pack 和 AngleSharp 基本上可以认为是只爬静态网页,后者明确表示可以解析基本的 JS 但不能解析 Angular。前一个文档简单易读,有一些方法没有文档,而后一个文档很广泛。前者只有 200 多个提交,后者超过 6,000 个。贡献者和star数也是后者,后者由.net基金会支持。后者在各方面都优于前者。但是,现在 GitHub 的使用者可以看到,前者差不多 20000,而后者不到 3000。现在后者一直没有透露这个数据,我也不知道为什么。实际上,它们都只是在解析 HTML。如果你不明白这句话的意思,

  然后添加一个我看到的:dotnetcore/DotnetSpider,这个项目是国产的,也支持Core和distributed。但这正在被重写,并且文档不是很好(几乎没有)。

  对于动态网页,如果您不知道如何找到界面:

  如果使用的是.NET Framework,可以使用System.Windows.Forms.WebBrowser.Document获取HtmlDocument,根据需要使用All或Body的HtmlElement的OuterHtml,或者根据需要传递给这两个框架。但是这个控件默认的内核是老的IE内核,对现代前端的标准支持不好。

  如果是.NET Core,单机可以使用Selenium+PhantomJS。不过后者不再维护,新版的 Selenium 也不再支持 PhantomJS。您可以考虑切换到其他 HeadLess 浏览器,例如 CEF 或其他 WebDriver。

  因为这个问题是关于框架的,所以我回答了上面的框架。对于爬虫的初学者,我这里写一点关于爬虫的基础知识:

  您需要对前端和网络基础知识有所了解。实际上,爬虫本质上是向服务器请求数据。

  如果是服务端渲染,下载HTML,使用解析HTML的框架提取需要的信息;如果是客户端渲染,可以在浏览器的f12中选择网络和XHR找到AJAX请求,手动发送即可。这很好。这就是 requests 和 bs4 所做的。

  爬虫真正的难点是多线程/分布式,与反爬虫的斗争,以及数据的保存和清洗。这些与网络请求关系不大。这就是像scrapy这样的爬虫框架进来的地方。

  如果你已经有前端和网络的基础知识,你会发现requests和bs4不用学习就已经知道了。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线