首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在C#中抓取动态web内容

在C#中抓取动态web内容
EN

Stack Overflow用户
提问于 2011-06-06 03:26:09
回答 2查看 2.3K关注 0票数 1

可以抓取动态网页生成的数据吗?我的意思是,例如,This website使用一些java脚本生成标记<font>,这是

代码语言:javascript
复制
document.write("<font class=spy2>:<\/font>"+(v2j0j0^o5r8)+(r8d4x4^y5i9)+(b2r8e5^u1p6)+(r8d4x4^y5i9))

每次刷新页面时,这些值都会发生变化。每个生成的代码代表一个从0到9的数字,例如(code1)+(code2)+(code3)+(code4),在后端编写了某种类型的解析器,它可以理解它并相应地生成数字。

一旦页面被渲染,例如code1被设置为数字4的某个位置,生成数字4的位置就是经过解析后的代码。

如果我们使用HtmlAgilityPack,我们会看到java脚本代码,但看不到它生成输出。我们有没有办法在呈现页面时读取它创建的标签?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-06-06 03:32:26

感谢您指出。我通过实现.same结果看到了这一点,但随后查看了另一个评论,他说使用IE引擎。我转过身,制作了一个小应用程序来完成此工作。我添加了IE并将其导航到网站,然后显示content.Here是代码

代码语言:javascript
复制
 private void webBrowser1_DocumentCompleted(object sender, System.Windows.Forms.WebBrowserDocumentCompletedEventArgs e)
        {
  System.Windows.Forms.HtmlElementCollection elementsforViewPost =
                                webBrowser1.Document.GetElementsByTagName("font");
  foreach (System.Windows.Forms.HtmlElement current2 in elementsforViewPost)
  {
  if (current2.InnerText != null && CheckForValidProxyAddress(current2.InnerText) &&
                    ObtainedProxies.Where(index=>index.ProxyAddress == current2.InnerText.Trim()).ToList().Count == 0)
 {
   Proxy data = new Proxy();
   data.IsRetired = false;
   data.IsActive = true;
   int result = 1;                   

   data.DomainsVisited = 0;
   data.ProxyAddress = current2.InnerText.Trim();

   ObtainedProxies.Add(data);
}

为了检查接收到的文本是否有效,这里是我很久以前通过谷歌从某个页面上获得的代理

代码语言:javascript
复制
  private bool CheckForValidProxyAddress(string address)
        {

        //create our match pattern
        //string pattern = @"^([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])(\.([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])){3}$:([0-9][0-9][0-9][0-9])";
        string pattern = @"\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b\:[0-9]{0,4}";
        //create our Regular Expression object
        Regex check = new Regex(pattern);
        //boolean variable to hold the status
        bool valid = false;
        //check to make sure an ip address was provided
        if (address == "")
        {
            //no address provided so return false
            valid = false;
        }
        else
        {
            //address provided so use the IsMatch Method
            //of the Regular Expression object
            valid = check.IsMatch(address, 0);
        }
        //return the results
        return valid;
    }
票数 0
EN

Stack Overflow用户

发布于 2011-06-06 03:43:15

我认为你不得不使用IE引擎。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6245294

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档