关闭。这个问题需要更多 focused 。它目前不接受答案。












想改善这个问题吗?更新问题,使其仅关注 editing this post 的一个问题。

5年前关闭。



Improve this question




当没有可用的 webservice API 时,您唯一的选择可能是 Screen Scrape,但是您如何在 c# 中做到这一点?

你觉得怎么做?

最佳答案

马特和保罗的答案是正确的。通过解析网站的 HTML 进行“屏幕抓取”通常是一个坏主意,因为:

  • 解析 HTML 可能很困难 ,特别是如果它格式错误。如果您正在抓取一个非常非常简单的页面,那么正则表达式可能会起作用。否则,请使用解析框架,如 HTML Agility Pack。
  • 网站是一个移动的目标 。每次源网站更改其标记结构时,您都需要更新代码。
  • Javascript 不能很好地抓取屏幕。如果目标网站使用任何类型的动态脚本来操纵网页,您将很难抓取它。抓取 HTTP 响应很容易,抓取浏览器显示的内容以响应该响应中包含的客户端脚本要困难得多。

  • 如果屏幕抓取是唯一的选择,这里有一些成功的关键:
  • 尽可能轻松地更改您要查找的模式 。如果可能,将模式存储为文本文件或资源文件中的某处。让其他开发人员(或您自己在 3 个月内)能够非常轻松地了解您希望找到的标记。
  • 验证输入并抛出有意义的异常 。在您的解析代码中,注意让您的异常非常有帮助。目标站点会在您身上发生变化,当发生这种情况时,您希望错误消息不仅告诉您代码的哪一部分失败,而且告诉您失败的原因。提及您正在寻找的模式和您正在比较的文本。
  • 编写大量自动化测试 。您希望以非破坏性方式运行爬虫非常容易,因为您将进行大量迭代开发以获得正确的模式。尽可能多地自动化测试,从长远来看它会得到返回。
  • 考虑一个浏览器自动化工具 Watin 。如果您需要与目标网站进行复杂的交互,从浏览器本身的角度编写爬虫可能更容易,而不是手动处理 HTTP 请求和响应。

  • 至于如何在 C# 中进行屏幕抓取,您可以使用 Watin(见上文)并使用其 DOM 抓取生成的文档,或者您可以使用 WebClient 类 [参见 MSDN 或 Google] 获取原始 HTTP 响应,包括HTML 内容,然后使用某种基于文本的分析来提取您想要的数据。

    关于c# - 你如何屏幕抓取?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2425043/

    10-13 09:03