我有一個任務在C#上編寫一個程序,它可以從網站上找到所有的http鏈接。現在我已經爲它編寫這樣一個功能:如何從網站執行所有http鏈接?
async static void DownloadWebPage(string url)
{
using (HttpClient client = new HttpClient())
using (HttpResponseMessage response = await client.GetAsync(url))
using (HttpContent content = response.Content)
{
string[] resArr;
string result = await content.ReadAsStringAsync();
resArr = result.Split(new string[] {"href"}, StringSplitOptions.RemoveEmptyEntries);//splitting
//here must be some code-string which finds all neccessary http-links from resArr
Console.WriteLine("Main page of " + url + " size = " + result.Length.ToString());
}
}
使用此功能,我打開一個網頁內容到字符串,然後我解析字符串,使用的「href」 -splitter結果寫入到陣列,然後我檢查每個字符串上的數組單元,其中包含「href」子串。因此,我可以獲取字符串,其中的內容爲http-links。問題在字符串分裂時開始,因爲不可能找到http-links,在我看來這是由於這個字符串的內容格式。如何解決它?
你應該看看使用實際的Html解析器,如HtmlAgilityPack。使用string.Split(或正則表達式)是一個壞主意。 – gunr2171 2014-08-27 12:24:37
你不是在解析任何東西。 ''將導致''。如果你添加更多的鏈接,你會在那裏產生更多的垃圾。你必須使用HTML解析器(並且不會考慮JavaScript引發的鏈接)。一個原始的解決方案可能是使用正則表達式(請注意,您將匹配URL,您不能使用正則表達式來解析HTML)來查找所有URL,但是您必須清除該列表(例如,刪除POST,腳本,CSS等等)。 – 2014-08-27 12:27:12