//要抓取的URL地址
string UrlBank = "http://www.bankrate.com.cn/bankoutlets/1";
string strResultBank = GetWebContent(UrlBank);
//取出和数据有关的那段源码
int iBodyStartBank = strResultBank.IndexOf("<body", 0);
int iStartBank = strResultBank.IndexOf("中国建设银行省份网点", iBodyStartBank);
int iTableStartBank = strResultBank.IndexOf("<div", iStartBank);
int iTableEndBank = strResultBank.IndexOf("</div>", iTableStartBank);
string strWebBank = strResultBank.Substring(iTableStartBank, iTableEndBank - iTableStartBank + 8);
//生成HtmlDocument
WebBrowser webbBank = new WebBrowser();
webbBank.Navigate("about:blank");
HtmlDocument htmldocBank = webbBank.Document.OpenNew(true);
htmldocBank.Write(strWebBank);
HtmlElementCollection htmlTRBank = htmldocBank.GetElementsByTagName("a");
foreach (HtmlElement tr in htmlTRBank)
{
strCity = tr.OuterText;
strCity = strCity.Substring(0, strCity.Length - 1);
}
我做了一个实例,以上这段代码可以抓取到html 所有源码,并可以获取我想要的数据
现在问题是我要抓取这里面的数据 http://www.bankrate.com.cn/creditcard/10_2
可是查看源码后如“主卡年费”显示的是0(<td class="td_data_left td_bg">主卡年费</td>
<td class="content ajaxdata">0</td>)这里正确的应该是“免费”,这样我就纳闷了,
我如果才能得到真正的数据呢,谢谢各位支招
string UrlBank = "http://www.bankrate.com.cn/bankoutlets/1";
string strResultBank = GetWebContent(UrlBank);
//取出和数据有关的那段源码
int iBodyStartBank = strResultBank.IndexOf("<body", 0);
int iStartBank = strResultBank.IndexOf("中国建设银行省份网点", iBodyStartBank);
int iTableStartBank = strResultBank.IndexOf("<div", iStartBank);
int iTableEndBank = strResultBank.IndexOf("</div>", iTableStartBank);
string strWebBank = strResultBank.Substring(iTableStartBank, iTableEndBank - iTableStartBank + 8);
//生成HtmlDocument
WebBrowser webbBank = new WebBrowser();
webbBank.Navigate("about:blank");
HtmlDocument htmldocBank = webbBank.Document.OpenNew(true);
htmldocBank.Write(strWebBank);
HtmlElementCollection htmlTRBank = htmldocBank.GetElementsByTagName("a");
foreach (HtmlElement tr in htmlTRBank)
{
strCity = tr.OuterText;
strCity = strCity.Substring(0, strCity.Length - 1);
}
我做了一个实例,以上这段代码可以抓取到html 所有源码,并可以获取我想要的数据
现在问题是我要抓取这里面的数据 http://www.bankrate.com.cn/creditcard/10_2
可是查看源码后如“主卡年费”显示的是0(<td class="td_data_left td_bg">主卡年费</td>
<td class="content ajaxdata">0</td>)这里正确的应该是“免费”,这样我就纳闷了,
我如果才能得到真正的数据呢,谢谢各位支招
解决方案 »
- 远程主机强迫关闭了一个现有的连接
- gridview绑定xml的问题
- 如何格式化数据读取的数据?
- 关于存储过程的问题(很着急)
- 有关登陆跳转的问题,请各位大侠帮忙!
- +++++++++++++++ 如何关闭一个Session??? +++++++++++
- 打不开设计视图问题
- 我的程序是要实现点击DataGrid中的一行,然后弹出子窗口进行编辑,操作完后刷新父窗口的DataGrid,为什么会出现以下提示呢:"不重新发送信息,
- 怎样在window关闭时执行服务器端方法?
- 关于与sybase的连接问题,高手指点一下了!
- 江湖救急,100分,Model,DAL,BLL,有请。
- asp.net重新发布后没有更新的问题
loadContent('http://code.bankrate.com.cn/getProductData/creditcard_10_2');
</script>
秘密就是http://code.bankrate.com.cn/getProductData/creditcard_10_2这个是抓取你所需数据的真实URL
当然,很多网站都进行了referer来源判断,所以抓取时,还要模拟httpreferer
既然你会抓取网站,如何模拟就不多说了.
HttpWebRequest myHttpWebRequest;
myHttpWebRequest = (HttpWebRequest)WebRequest.Create("http://code.bankrate.com.cn/getProductData/creditcard_1152_0");
myHttpWebRequest.Referer = "http://www.bankrate.com.cn/creditcard/1152"; //返回信息
HttpWebResponse myHttpWebResponse = (HttpWebResponse)myHttpWebRequest.GetResponse();
Stream resStream = myHttpWebResponse.GetResponseStream();
StreamReader sr = new StreamReader(resStream,System.Text.Encoding.Default);
string responseContent = sr.ReadToEnd();
resStream.Close();
sr.Close();可是 responseContent 得到的是 setAjaxData([\"80\\u5143\",\"40\\u5143\",\"25\\u5929\",
这样的数据,现在我需要把这个转换成汉字,如果转换,我试着用UTF-8,GB2312 但都不行,最终得到的还是原文,不知道如何转,有哪位知道吗?