0

Web ページをスクレイピングしましたが、リンクに有効なリンクが必要で、クリックするとそのリンクページにジャンプします。

ex スクレイピングされたデータ: 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(上記)の各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解析が最良の方法ではないことを知っています(あなたがそれをより良く解析する方法についての提案があるなら、plsはそうします)。今のところ、唯一の目標は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 に答える