2014-08-27 49 views
1

我有一個任務在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,在我看來這是由於這個字符串的內容格式。如何解決它?

+4

你應該看看使用實際的Html解析器,如HtmlAgilityPack。使用string.Split(或正則表達式)是一個壞主意。 – gunr2171 2014-08-27 12:24:37

+1

你不是在解析任何東西。 ''將導致''。如果你添加更多的鏈接,你會在那裏產生更多的垃圾。你必須使用HTML解析器(並且不會考慮JavaScript引發的鏈接)。一個原始的解決方案可能是使用正則表達式(請注意,您將匹配URL,您不能使用正則表達式來解析HTML)來查找所有URL,但是您必須清除該列表(例如,刪除POST,腳本,CSS等等)。 – 2014-08-27 12:27:12

回答

0

我曾經做過類似的事情。我的解決方案是以適合xml規定的方式更改html。 (這可能是這個解決方案的問題,我相信我的html是以某種方式預定義的,所以我只需要更改一些我知道的不符合html的東西)

之後,您可以簡單搜索「a」節點並閱讀href參數。

不幸的是,我再也找不到我的代碼了,這太早了。