【问题标题】:Web page crawling in C#C#中的网页抓取
【发布时间】:2010-12-21 23:33:46
【问题描述】:

我的任务是抓取/解析和索引许多图书馆网页上的可用书籍。我通常使用 HTML Agility Pack 和 C# 来解析网站内容。其中之一是:

http://bibliotek.kristianstad.se/pls/bookit/pkg_www_misc.print_index?in_language_id=en_GB

如果您搜索 *(所有书籍),它将返回许多书籍列表,每页分页 10 本书。

我发现的典型网络爬虫在这个网站上失败了。我还尝试编写自己的爬虫,它会遍历页面上的所有链接并生成 post/get 变量以动态生成结果。我也无法做到这一点,主要是因为我得到了一些 404 错误(尽管我确信生成的链接是正确的)。

网站依赖javascript生成内容,并采用GET和POST变量提交的混合模式。

【问题讨论】:

  • 这里有问题吗?

标签: c# web-crawler


【解决方案1】:

我有点冒险,但尝试使用 Fiddler 观察 JavaScript GET 和 POST,然后您就可以根据这些请求进行爬网。 Fiddler 有 FiddlerCore,您可以将其放入您自己的 C# 项目中。使用它,您可以监视在 WebBrowser 控件中发出的请求,然后将它们保存以供以后抓取或进行其他操作。

走 C# JavaScript 解释器路线听起来像是“更正确”的做法,但我敢打赌,除非你有最简单的情况,否则它会更难,而且会出现错误和错误。

祝你好运。

【讨论】:

  • 另外,还有一个用于 Fiddler 的插件,可以生成 HttpWebRequest 代码以重新生成特定请求。对于依赖某些标题的屏幕抓取网站非常方便。 (显然是你写的——天哪,真是巧合!)
  • @Josh - 真是巧合,对 ;-) 我碰巧是 Fiddler 的粉丝。它比我预期的更方便。希望OP也可以使用它。插件的必填链接 - chadsowald.com/software/fiddler-extension-request-to-code
  • 我认为这会解决我的问题。我得到了许多我没有看到分析页面脚本的变量。确实很棒的工具,我希望我早点知道它。
【解决方案2】:

FWIW,C# WebBrowser 控件非常非常慢。它也不支持两个以上的同时请求。

使用 SHDocVw 速度更快,但信号量也有限。

Faster 仍在使用 MSHTML。此处的工作代码:https://svn.arachnode.net/svn/arachnodenet/trunk/Renderer/HtmlRenderer.cs 用户名/密码:公共(没有其他两个进程耗尽时的请求/渲染限制......)

这是无头的,因此不会呈现任何控件。 (更快)。

谢谢, 迈克

【讨论】:

    【解决方案3】:

    如果您在 Windows 窗体应用程序中使用 WebBrowser control 打开页面,那么您应该能够通过 HtmlDocument 访问 DOM。这适用于 HTML 链接。

    至于通过 Javascript 生成的链接,您可以查看 ObjectForScripting 属性,它应该允许您通过 Javascript 与 HTML 页面进行交互。剩下的就变成了一个 Javascript 问题,但它应该(理论上)是可以解决的。这个我没试过,所以不能说。

    【讨论】:

      【解决方案4】:

      如果网站使用 JavaScript 生成内容,那么您就不走运了。您需要一个可在 C# 中使用的完整 JavaScript 引擎,以便您可以实际执行脚本并捕获它们生成的输出。

      看看这个问题:Embedding JavaScript engine into .NET——但要知道,做你需要的事情需要“认真”的努力。

      【讨论】:

      • 他或许能够自动化 WebBrowser 控件,但这会导致大多数测试对象过早死亡。
      • @Josh:希望有人能在一年前告诉我这些明智的话 :-)
      • @Josh - 是的,这是我一开始的想法。不过感谢您的提醒:)
      【解决方案5】:

      AbotX 为您进行 javascript 渲染。不过它不是免费的。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-06-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-28
        • 2021-07-03
        相关资源
        最近更新 更多