正则相对复杂些,另外如果对方一修改,你又得重新弄。 还是用我的代码吧! Function GetKey(ByVal HTML, ByVal Start, ByVal Last) Dim body1 = Split(HTML, Start) Dim body2 = Split(body1(1), Last) GetKey = body2(0) End Function text = GetKey(test, A_Text_Star.Text, A_Text_End.Text)通过两个指定字符得到中间的值
这个是我的程序 //根据Url地址得到网页的html源码
private string GetWebContent(string Url)
{
string strResult = "";
try
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url);
//声明一个HttpWebRequest请求
request.Timeout = 30000;
//设置连接超时时间
request.Headers.Set("Pragma", "no-cache");
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream streamReceive = response.GetResponseStream();
Encoding encoding = Encoding.GetEncoding("utf-8");
StreamReader streamReader = new StreamReader(streamReceive, encoding);
strResult = streamReader.ReadToEnd();
//关闭读取流对象
streamReader.Close();
}
catch
{
MessageBox.Show("出错");
}
return strResult;
}
//点击按钮显示信息
private void btnShow_Click(object sender, EventArgs e)
{
//要抓取的URL地址
string Url = "http://www.dianping.com/search/category/2/10/g311"; //得到指定Url的源码
string strWebContent = GetWebContent(Url); rchCode.Text = strWebContent;
}从这里可以获取网页源码,关键是正则获取商家信息,正则表达式我用不好,也就是根据http://www.dianping.com/search/category/2/10/g311这个网址怎样获取"印巷小馆(燕莎桥店) 朝阳区朝阳公园路好运街1-8号 58670286"
{
string str = "<dd><ul class=\"re\"></ul><strong class=\"average\"><span class=\"Price\">¥</span>63</strong><ul class=\"detail\"><li class=\"shopname\"><a href=\"/shop/4719387?KID=74659\" class=\"BL\" title=\"印巷小馆\" kid=\"74659\" onclick=\"pageTracker._trackPageview('dp_search_shopname_beijing');$APClickTracker(74659,40);\" target=\"_blank\">印巷小馆(燕莎桥店)</a><span class=\"tip\"><a href=\"/search/branch/2/0_3596584/g0\" onclick=\"pageTracker._trackPageview('dp_search_branch_beijing')\" target=\"_blank\"><em>分店</em></a></span><span class=\"tip\"><a href=\"/bussiness\" class=\"spread\" target=\"_blank\" onclick=\"pageTracker._trackPageview('dp_search_snippet_biz')\">推广</a></span><li class=\"address\"><strong>地址:</strong><a href=\"/search/category/2/0/r14\" class=\"Black-H\">朝阳区</a>朝阳公园路好运街1-8号 58670286</li></li><li class=\"tags\"></li></ul><p class=\"fn\"></p></dd>"; string namefront = ");\" target=\"_blank\">";
int begin = str.IndexOf(namefront) + namefront.Length;
int end = str.IndexOf("</a><span class=\"tip\">");
Console.WriteLine(str.Substring(begin, end - begin));
Console.ReadKey();
}
输出—— 印巷小馆(燕莎桥店)
用indexof+substring 是可以实现的
当然对于网页源码来说 用正则是最好的
我前几天才做了一个抓取网页源码 获取客户信息的软件
我这样做的
string str = "<dd><ul class=\"re\"></ul><strong class=\"average\"><span class=\"Price\">¥</span>63</strong><ul class=\"detail\"><li class=\"shopname\"><a href=\"/shop/4719387?KID=74659\" class=\"BL\" title=\"印巷小馆\" kid=\"74659\" onclick=\"pageTracker._trackPageview('dp_search_shopname_beijing');$APClickTracker(74659,40);\" target=\"_blank\">印巷小馆(燕莎桥店)</a><span class=\"tip\"><a href=\"/search/branch/2/0_3596584/g0\" onclick=\"pageTracker._trackPageview('dp_search_branch_beijing')\" target=\"_blank\"><em>分店</em></a></span><span class=\"tip\"><a href=\"/bussiness\" class=\"spread\" target=\"_blank\" onclick=\"pageTracker._trackPageview('dp_search_snippet_biz')\">推广</a></span><li class=\"address\"><strong>地址:</strong><a href=\"/search/category/2/0/r14\" class=\"Black-H\">朝阳区</a>朝阳公园路好运街1-8号 58670286</li></li><li class=\"tags\"></li></ul><p class=\"fn\"></p></dd>"; string str3 = ");\" target=\"_blank\">";
int begin3 = str.IndexOf(str3) + str3.Length;
int end3 = str.IndexOf("</a><span class=\"tip\">");
MessageBox.Show(str.Substring(begin3, end3 - begin3));
string namefront = "\" class=\"Black-H\">";
int begin = str.IndexOf(namefront) + namefront.Length;
int end = str.IndexOf("</a>朝阳公园路好运街1-8号 58670286</li></li><li class=\"tags\"></li></ul><p class=\"fn\"></p></dd>");
// MessageBox.Show("",str.Substring(begin, end - begin));
string str1 = "\" class=\"Black-H\">朝阳区</a>";
int begin1 =str.IndexOf(str1)+str1.Length;
int end1 = str.IndexOf(" ");
MessageBox.Show(str.Substring(begin, end - begin)+str.Substring(begin1,end1-begin1)); string str2 = "</a>朝阳公园路好运街1-8号 ";
int begin2 = str.IndexOf(str2)+str2.Length;
int end2 = str.IndexOf("</li></li><li class=\"tags\"></li></ul><p class=\"fn\"></p></dd>");
MessageBox.Show(str.Substring(begin2,end2-begin2));
这样只能获取一条商家的信息,关键是要获取所有的商家信息,很急,请帮助
稍微复杂方法是直接发http请求,用正则表达式匹配。
还是用我的代码吧! Function GetKey(ByVal HTML, ByVal Start, ByVal Last)
Dim body1 = Split(HTML, Start)
Dim body2 = Split(body1(1), Last)
GetKey = body2(0)
End Function text = GetKey(test, A_Text_Star.Text, A_Text_End.Text)通过两个指定字符得到中间的值
另外要用共有信息提取 不要用诸如 "\" class=\"Black-H\">朝阳区</a>" 来提取,
因为事先并不知道这标签里面是“朝阳区”或其他。
写起来比较麻烦一些,应该没什么难度。