001*_*001 13 c# api web-services web-scraping
当没有可用的Web服务API时,您唯一的选择可能是Screen Scrape,但是您如何在c#中执行此操作?
你觉得怎么做?
Mat*_*nik 12
使用Html Agility Pack.它处理不良和格式错误的HTML.它允许您使用XPath进行查询,从而可以非常轻松地查找您正在查找的数据.不要手工编写解析器,也不要使用正则表达式,这太笨拙了.
Set*_*son 12
马特和保罗的答案是正确的.通过从网站解析HTML来"屏幕抓取"通常是一个坏主意,因为:
解析HTML可能很困难,特别是如果它格式不正确.如果你正在抓一个非常非常简单的页面,那么正则表达式可能会起作用.否则,请使用HTML Agility Pack等解析框架.
网站是一个不断变化的目标.每次源网站更改其标记结构时,您都需要更新代码.
使用Javascript进行屏幕抓取效果不佳.如果目标网站使用任何类型的动态脚本来操纵网页,那么您将非常难以抓取它.抓取HTTP响应很容易,要抓取浏览器显示的内容以响应该响应中包含的客户端脚本要困难得多.
如果屏幕抓取是唯一的选择,这里有一些成功的关键:
尽可能简单地更改您要查找的模式.如果可能,将模式存储为文本文件或存储在某个资源文件中.让其他开发人员(或3个月内自己)很容易理解您希望找到的标记.
验证输入并抛出有意义的异常.在解析代码中,请注意使您的异常非常有用.目标站点将在您身上发生变化,当发生这种情况时,您希望您的错误消息不仅告诉您代码的哪个部分失败,而且还告诉您失败的原因.提及您正在寻找的模式和您要比较的文本.
写了很多自动化测试.您希望以非破坏性的方式运行刮刀非常容易,因为您将进行大量的迭代开发以使模型正确.尽可能多地自动化测试,从长远来看,它将获得回报.
考虑像Watin这样的浏览器自动化工具.如果您需要与目标网站进行复杂的交互,那么从浏览器本身的角度来编写您的刮刀可能更容易,而不是手工编写HTTP请求和响应.
至于如何在C#中屏幕抓取,您可以使用Watin(参见上文)并使用其DOM抓取生成的文档,或者您可以使用WebClient
类[请参阅MSDN或Google]来获取原始HTTP响应,包括HTML内容,然后使用某种基于文本的分析来提取所需的数据.
归档时间: |
|
查看次数: |
30785 次 |
最近记录: |