0

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

前抓取的数据:第 1 天 - 转到我的页面 - 状态

我希望转到我的页面跳转到其 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 字符串,但无法弄清楚如何找到正确的 index 。另外,一旦我能够改变它,如何将 strResult(above) 中的每个 href 替换为新的 href?

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

谁能帮帮我?谢谢

4

1 回答 1

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;

        }
于 2012-08-18T04:09:20.237 回答