如何屏蔽scrape并将有效的href链接转到该链接

时间:2012-08-17 18:21:17

标签: hyperlink screen-scraping href

我已经抓取了一个网页,但我希望该链接具有有效链接,并在点击时跳转到该链接页。

ex scraped data:第1天 - 转到我的页面 - 状态

我希望Go to my page跳转到其href中的任何链接。

离。我得到的实际HTML

<td><a href="javascript:jsFormAuth('summary.php?meetingid=40456&plusday=0');">Go to my Page</a></td>

我需要它像这样:

<td><a href="http://somewebsite.com/tab/form/summary.php?meetingid=40456&plusday=0');">Go to my Page</a></td>

这是我的代码刮:

public string ScreenScrape()
        {
            string url = "http://somewebsite.com/tab/form/index.php";
            string strResult = "";

            WebResponse objResponse;
            WebRequest objRequest = System.Net.HttpWebRequest.Create(url);

            objResponse = objRequest.GetResponse();

            using (StreamReader sr = new StreamReader(objResponse.GetResponseStream()))
            {
                strResult = sr.ReadToEnd();
                // Close and clean up the StreamReader
                sr.Close();
            }
            var webGet = new HtmlAgilityPack.HtmlWeb();
            var doc = webGet.Load(url);

            foreach (HtmlNode link in doc.DocumentNode.SelectNodes("//a[@href]"))
            {
                HtmlAttribute att = link.Attributes["href"];
                att.Value = "http://somewebsite.com/tab/form/"+att.Value;
            }


            return strResult;
        }

这是我尝试更改链接并删除javascript字符串但无法弄清楚如何获得正确的索引。此外,一旦我能够改变它,我如何将strResult(上面)中的每个href替换为新的href?

    foreach (HtmlNode link in doc.DocumentNode.SelectNodes("//a[@href]"))
    {
        HtmlAttribute att = link.Attributes["href"];
        att.Value = "http://somewebsite.com/tab/form/" + ....
    }

任何人都可以帮助我吗?感谢

1 个答案:

答案 0 :(得分:0)

没关系我得到了它,但我知道html url解析不是最好的方法(如果你有关于如何更好地解析它的建议,请这样做)。现在,唯一的目标是改变href链接,所以它就在这里。

 public string ScreenScrape()
        {
            string url = "http://somewebsite.com/tab/form/index.php";
            string strResult = "";

            WebResponse objResponse;
            WebRequest objRequest = System.Net.HttpWebRequest.Create(url);

            objResponse = objRequest.GetResponse();

            using (StreamReader sr = new StreamReader(objResponse.GetResponseStream()))
            {
                strResult = sr.ReadToEnd();
                // Close and clean up the StreamReader
                sr.Close();
            }
            var webGet = new HtmlAgilityPack.HtmlWeb();
            var doc = webGet.Load(url);

            foreach (HtmlNode link in doc.DocumentNode.SelectNodes("//a[@href]"))
            {

                string removeString ="javascript:jsFormAuth('";
                string removeEnd = "');";
                HtmlAttribute att = link.Attributes["href"];
                String strUrl = HttpContext.Current.Request.Url.AbsoluteUri.Replace(att.XPath, "(");
                string sub1 = att.Value.Replace(removeString,"");
                string sub2 = sub1.Replace(removeEnd,"");
                att.Value = "http://somewebsite.com/tab/form/" + sub2;

            }

            return doc.DocumentNode.InnerHtml;

        }