我获取到某个网页的HTML代码,例如:<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>
...(省略)
<ul class="shop-list">
<li>
<h4>
<a target="_blank" href="http://item.taobao.com/auction/item_detail-0db1-91ea75432fd891a8e003b4a984c92d44.htm">
<<中文版3ds Max 8家居效果图设计完全攻略>>随书光盘
</a>
</h4>
<div class="item">
<div class="pic"> <a title="<<中文版3ds Max 8家居效果图设计完全攻略>>随书光盘" href="http://item.taobao.com/auction/item_detail-0db1-91ea75432fd891a8e003b4a984c92d44.htm" target="_blank">
<img src="http://img03.taobaocdn.com/bao/uploaded/i3/20071205/911/T1z50aXmY0gky9Tz.7_065338.jpg_sum.jpg"/>
</a>
</div>
</div>
</li>
</ul>
...(省略)请问如何我忽略前面不关心的数据,获取到
http://item.taobao.com/auction/item_detail-0db1-91ea75432fd891a8e003b4a984c92d44.htm
<<中文版3ds Max 8家居效果图设计完全攻略>>随书光盘
http://img03.taobaocdn.com/bao/uploaded/i3/20071205/911/T1z50aXmY0gky9Tz.7_065338.jpg_sum.jpg
这几个关键的数据,System.Text.RegularExpressions.Regex reg = new System.Text.RegularExpressions.Regex()?.
谢谢.
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>
...(省略)
<ul class="shop-list">
<li>
<h4>
<a target="_blank" href="http://item.taobao.com/auction/item_detail-0db1-91ea75432fd891a8e003b4a984c92d44.htm">
<<中文版3ds Max 8家居效果图设计完全攻略>>随书光盘
</a>
</h4>
<div class="item">
<div class="pic"> <a title="<<中文版3ds Max 8家居效果图设计完全攻略>>随书光盘" href="http://item.taobao.com/auction/item_detail-0db1-91ea75432fd891a8e003b4a984c92d44.htm" target="_blank">
<img src="http://img03.taobaocdn.com/bao/uploaded/i3/20071205/911/T1z50aXmY0gky9Tz.7_065338.jpg_sum.jpg"/>
</a>
</div>
</div>
</li>
</ul>
...(省略)请问如何我忽略前面不关心的数据,获取到
http://item.taobao.com/auction/item_detail-0db1-91ea75432fd891a8e003b4a984c92d44.htm
<<中文版3ds Max 8家居效果图设计完全攻略>>随书光盘
http://img03.taobaocdn.com/bao/uploaded/i3/20071205/911/T1z50aXmY0gky9Tz.7_065338.jpg_sum.jpg
这几个关键的数据,System.Text.RegularExpressions.Regex reg = new System.Text.RegularExpressions.Regex()?.
谢谢.
MatchCollection mc = Regex.Matches(yourStr, @"<a\s+title=""(?<title>[^""]*)""\s+href=""(?<url>[^""]*)""[^>]*>\s*<img\s+src=""(?<src>[^""]*)""[^>]*>\s*</a>", RegexOptions.IgnoreCase);
foreach (Match m in mc)
{
richTextBox2.Text += m.Groups["title"].Value + "\n";
richTextBox2.Text += m.Groups["url"].Value + "\n";
richTextBox2.Text += m.Groups["src"].Value + "\n";
}但是因为楼主的需求不是很明确,所以以上代码可能仅适用于这个例子,需要楼主更清楚的说明一下需求如要提取的数据符合什么样的规律,哪一部分会变,哪一部分固定等等
可能我没有说明白,就是这个网页的前面部分我不关心,应该直接判断到<ul class="shop-list">
,这个地方,可能用字符串判断就可以,要么就是2楼的方法,用DOM 来做~~~
那到了<ul class="shop-list"> 之后呢,比如这之后的代码中有不需要的<a...>...</a>,如何区分如果能用DOM来处理,DOM会简单些,正则会灵活些
首先可以用一段正则表达式来获取<ul class="shop-list"></ul> ,然后,用Xpath来去值,代码如下:Regex reg=new Regex(@"<ul[^>]*?class=""shop-list""[^>]*>((?>(?<o><ul[^>]*>)|(?<-o></ul>)|(?:(?!</?ul)[\s\S]))*)(?(o)(?!))</ul>");
Match m=reg.match(htmlsrc);
string s="";
if(m.success)
s=m.group[0].value;
XmlDocument xm = new XmlDocument();
xm.LoadXml(s);
//
//后面可以用xmldocumen的一些方法来取值
//
XmlNodeList NodeList = xml.SelectNodes("ul/div");//这里XPath可以写上你的筛选条件,
foreach(XmlNode xn in NodeList)
{
//要存入到数据库或者数字等
}
<li>
<h4>
<a target="_blank" href="http://item.taobao.com/auction/item_detail-0db1-91ea75432fd891a8e003b4a984c92d44.htm">
<<中文版3ds Max 8家居效果图设计完全攻略>>随书光盘
</a>
</h4>
<div class="item">
<div class="pic"> <a title="<<中文版3ds Max 8家居效果图设计完全攻略>>随书光盘" href="http://item.taobao.com/auction/item_detail-0db1-91ea75432fd891a8e003b4a984c92d44.htm" target="_blank">
<img src="http://img03.taobaocdn.com/bao/uploaded/i3/20071205/911/T1z50aXmY0gky9Tz.7_065338.jpg_sum.jpg"/>
</a>
</div>
</div>
</li>
</ul>具体的数据就是刚才所说的数据,那么我处理的话,可能就是先判断到该数据的开始部分,然后判断什么地方结束,然后获取直接的数据部分,利用正则表达式来从该部分数据来获取自己想获取的数据~~~
不知道这样效率怎么样,用DOM的话,每个都处理的话,大部分数据不关心,这样会不会影响效率?
Stream stream = resp.GetResponseStream();
XmlTextReader reader = new XmlTextReader(stream);
reader.XmlResolver = null; // ignore the DTD
reader.WhitespaceHandling = WhitespaceHandling.None;所以,处理这个问题,还是利用正则表达式来判断,这个我也是从网上找了很多资料获知的,呵呵~~~
Regex regCon = new Regex(@"<a\s+title=""(?<title>[^""]*)""\s+href=""(?<url>[^""]*)""[^>]*>\s*<img\s+src=""(?<src>[^""]*)""[^>]*>\s*</a>", RegexOptions.IgnoreCase | RegexOptions.Compiled);
Match mUl = regUl.Match(yourStr);
if (mUl.Success)
{
Match mCon = regCon.Match(mUl.Value);
if(mCon.Success)
{
richTextBox2.Text += mCon.Groups["title"].Value + "\n";
richTextBox2.Text += mCon.Groups["url"].Value + "\n";
richTextBox2.Text += mCon.Groups["src"].Value + "\n";
}
}正则并不代表低的执行效率,要看正则写出的正则和使用的方式