我必须获取网络的 HTML 代码,之后才能找到这个类:
<span class='uccResultAmount'>0,896903</span>
我尝试使用正则表达式。
还有 Streams ,我的意思是,将整个 HTML 代码存储在string
中。但是,string
的代码非常大。这样就无法实现,因为0,896903
中不存在我正在搜索的string
金额。
有没有办法只读一小段Stream?
方法的一部分:
public static string getValue()
{
string data = "not found";
string urlAddress = "http://www.xe.com/es/currencyconverter/convert/?Amount=1&From=USD&To=EUR";
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(urlAddress);
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
if (response.StatusCode == HttpStatusCode.OK)
{
Stream receiveStream = response.GetResponseStream();
StreamReader readStream = null;
if (response.CharacterSet == null)
{
readStream = new StreamReader(receiveStream);
}
else
{
readStream = new StreamReader(receiveStream, Encoding.GetEncoding(response.CharacterSet));
}
data = readStream.ReadToEnd(); // the string in which I should search for the amount
response.Close();
readStream.Close();
}
如果您找到一种更简单的方法来解决我的问题,请告诉我。
答案 0 :(得分:0)
我会使用HtmlAgilityPack和Xpath
var web = new HtmlAgilityPack.HtmlWeb();
var doc = web.Load("http://www.xe.com/es/currencyconverter/convert/?Amount=1&From=USD&To=EUR");
var value = doc.DocumentNode.SelectSingleNode("//span[@class='uccResultAmount']")
.InnerText;
Linq版本也是可能的
var value = doc.DocumentNode.Descendants("span")
.Where(s => s.Attributes["class"] != null && s.Attributes["class"].Value == "uccResultAmount")
.First()
.InnerText;
<强> Don't use this 即可。只是为了展示
但问题是这个html代码不适合单个字符串
不正确
string html = new WebClient().DownloadString("http://www.xe.com/es/currencyconverter/convert/?Amount=1&From=USD&To=EUR");
var val = Regex.Match(html, @"<span[^>]+?class='uccResultAmount'>(.+?)</span>")
.Groups[1]
.Value;