Jeżeli ciąg wejściowy jest zgodna z XHTML można traktować to jako xml, załaduj go do XmlDocument i wykonaj XPath magii :) Ale to nie zawsze jest prawdą.
przeciwnym razie można spróbować tej funkcji, która zwróci wszystkie linki graficzne z HtmlSource:
public List<Uri> FetchLinksFromSource(string htmlSource)
{
List<Uri> links = new List<Uri>();
string regexImgSrc = @"<img[^>]*?src\s*=\s*[""']?([^'"" >]+?)[ '""][^>]*?>";
MatchCollection matchesImgSrc = Regex.Matches(htmlSource, regexImgSrc, RegexOptions.IgnoreCase | RegexOptions.Singleline);
foreach (Match m in matchesImgSrc)
{
string href = m.Groups[1].Value;
links.Add(new Uri(href));
}
return links;
}
I można go używać tak:
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://www.example.com");
request.Credentials = System.Net.CredentialCache.DefaultCredentials;
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
if (response.StatusCode == HttpStatusCode.OK)
{
using(StreamReader sr = new StreamReader(response.GetResponseStream()))
{
List<Uri> links = FetchLinksFromSource(sr.ReadToEnd());
}
}
Dzięki za to, waliłem głową o mój własny regex! –
'([^ '" "] +?)' Nie działa, jeśli href zawiera spacje! – Ahmad
Linia 'using (StreamReader sr = new StreamReader (response.GetResponseStream()) nie ma dodatkowego nawiasu zamykającego: – Kaitlyn