当前位置: 首页 > 编程语言 > C#

如何抓取屏幕?Share

时间:2023-04-10 20:26:16 C#

你是怎么刷屏的?如果没有可用的Web服务API,你唯一的选择可能是ScreenScrape,但你如何在C#中做到这一点?你觉得这样做怎么样?马特和保罗的回答是正确的。通过从网站解析HTML来“屏幕抓取”通常不是一个好主意,因为:解析HTML可能很困难,尤其是在格式不正确的情况下。如果您正在抓取一个非常非常简单的页面,则正则表达式可能会起作用。否则,请使用像HTMLAgilityPack这样的解析框架。网站是一个不断变化的目的地。每次源站点更改其标记结构时,您都需要更新代码。屏幕抓取不适用于Javascript。如果目标网站使用任何一种动态脚本来操纵网页,那么您将很难捕捉到它。抓取HTTP响应很容易,抓取浏览器显示的内容以响应该响应中包含的客户端脚本要困难得多。如果屏幕抓取是唯一的选择,这里有一些成功的关键:尽可能轻松地更改您正在寻找的模式。如果可能,将架构存储为文本文件或某些资源文件。让其他开发人员(或3个月后的你自己)更容易理解你希望找到的标记。验证输入并抛出有意义的异常。在解析代码时,请注意让您的异常非常有用。目标站点将在您身上发生变化,当发生这种情况时,您希望错误消息不仅告诉您代码的哪一部分失败,而且告诉您失败的原因。提及您正在寻找的模式和您正在比较的文本。写了很多自动化测试。您希望以非破坏性方式非常容易地运行爬虫,因为您将进行大量迭代开发以使模型正确。使尽可能多的测试自动化,从长远来看会有所回报。考虑像Watin这样的浏览器自动化工具。如果您需要与目标网站进行复杂的交互,从浏览器本身的角度编写您的爬虫可能比手动扫描HTTP请求和响应更容易。至于如何在C#中进行屏幕抓取,您可以使用Watin(见上文)并使用其DOM抓取生成的文档,或者您可以使用WebClient类[参见MSDN或Google]获取原始HTTP响应,包括HTML内容,然后使用某种基于文本的分析来提取您想要的数据。使用Html敏捷包。它处理错误和格式错误的HTML。它允许您使用XPath进行查询,从而非常容易地找到您要查找的数据。不要手写解析器,也不要使用正则表达式,太笨拙了。您要查找的术语实际上称为屏幕抓取。关于抓取网站,您必须考虑的一件事是它们不在您的控制范围内,并且可以频繁且显着地更改。事实上,如果你确实采取了改变,那应该是整体战略的一部分。例如,您迟早需要更新代码以处理“移动目标”。这里有几个C#链接可以帮助您入门:http://www.cambiaresearch.com/c4/3ee4f5fc-0545-4360-9bc7-5824f840a28c/How-to-scrape-or-download-a-webpage-using-csharp.aspx这是可以帮助您的示例C#代码Uriurl=newUri("http://msdn.microsoft.com/en-US/");if(url.Scheme==Uri.UriSchemeHttp){//创建请求对象HttpWebRequestobjRequest=(HttpWebRequest)HttpWebRequest.Create(url);//设置请求方法objRequest.Method=WebRequestMethods.Http.Get;//从请求的url获取响应HttpWebResponseobjResponse=(HttpWebjResponse.GetResponse();//在流读取器中读取响应StreamReaderreader=newStreamReader(objResponse.GetResponseStream());stringtmp=reader.ReadToEnd();objResponse.Close();//Setresponsedatatocontainerthis.pnlScreen.GroupingText=tmp;}需要注意的一点是,有些人提到将站点作为XML进行下拉,然后使用XPath遍历节点。确保您可能很重要使用以XHTML开发的网站以确保HTML代表格式正确的XML文档。从实用的角度来看(多年来我编写了数十个“网络交互”应用程序),我最终选择了Watin和CSQuery。Watin提供浏览器自动化的基础知识(与按钮等交互),而CSQuery允许您使用jQuery样式语法来解析页面内容。我将Selenium与IE和FireFox一起使用了一段时间(也用于网站的自动化测试),但发现它在长期使用时容易崩溃。我目前所有的生产系统都是Watin+CSQuery,每天对多个网站进行可靠的抓取。注意:我发现Watin有一段时间没有更新了,但是“如果它没坏,就用它吧!”?以上是C#学习教程:Howdoyouscreenscrape?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: