public string GetUrltoHtml(string Url, string type) { try { System.Net.WebRequest rt = System.Net.WebRequest.Create(Url); System.Net.WebResponse rs = rt.GetResponse(); System.IO.Stream respStream = rs.GetResponseStream(); using (System.IO.StreamReader reader = new System.IO.StreamReader(respStream, Encoding.GetEncoding(type))) { return reader.ReadToEnd(); } } catch (System.Exception ex) { //errorMsg = ex.Message; } return ""; }
protected void Button1_Click(object sender, EventArgs e) {
//网址就用这个 this.TextBox1.Text = "http://item.taobao.com/item.htm?id=36755239740"; string aa = GetUrltoHtml(this.TextBox1.Text.ToString().Trim(), "gbk");this.TextBox2.Text = aa; }
你换个网址测试一下 就可以 淘宝的 特殊处理了
就是想解决这个问题
@Ewin: 写了一个方法 可以获取到可以加我qq734209936
更简单的是:
WebClient webClient = new WebClient();
string html = System.Text.Encoding.UTF8.GetString(webClient.DownloadData("http://www.cnblogs.com"));
你要贴下你的错误信息。!
同出错,就是aa=""; aa为空
没出错,就是aa=""; aa为空
@Ewin: 这种可能是淘宝单方面的限制,你测试下其他的网站呢~
@幻天芒: 我要采集淘宝数据
@Ewin: 设置cookie等方式,模拟用户访问呗。
@幻天芒: 设置cookie等方式,模拟用户访问呗。 能有具体的CODE不?
@Ewin: 你用Chrome 的F12,然后访问淘宝的页面。查看请求的所有参数,然后仿照这个参数进行设置请求。
@幻天芒: 这就是正确答案!!!!!!!!!!!!!
建议加上UserAgent试试
System.Net.WebRequest rt = System.Net.WebRequest.Create(Url);
给你的rt把headers加了,先用fiddler看下浏览器访问时都带了哪些标头,都加到headers里,再把Cookie也加上,当然有一部分Cookie是httpOnly的,获取要费一番工夫,特别是模拟登录后的用户访问,这个几乎是必须的。代码嘛,你上面的代码其实已经没问题了,返回后的结果你可能还得转码,网页编码返回后有可能有乱码。 你还要观察网站是否有302跳转之类的,如果有的话,那上在的代码得改成递归访问。
HttpWebRequest request = null; if (url.ToLower().StartsWith("https", StringComparison.OrdinalIgnoreCase)) { ServicePointManager.ServerCertificateValidationCallback = new System.Net.Security.RemoteCertificateValidationCallback(CheckValidationResult); request = WebRequest.Create(url) as HttpWebRequest; request.ProtocolVersion = HttpVersion.Version10; } else { request = WebRequest.Create(url) as HttpWebRequest; } request.AllowWriteStreamBuffering = true; request.Timeout = 10000; request.Credentials = System.Net.CredentialCache.DefaultCredentials; request.Proxy = new WebProxy { UseDefaultCredentials = true }; request.MaximumResponseHeadersLength = -1; request.AllowAutoRedirect = false; request.UserAgent = "TLE Retriever v1.5.8"; request.ContentType = "application/x-www-form-urlencoded"; request.Method = "HEAD"; request.Headers.Add("Accept-Language", "cs,en-us;q=0.7,en;q=0.3"); request.Headers.Add("Accept-Encoding", "gzip,deflate"); request.KeepAlive = true; request.Headers.Add("Cookie", cookies ?? string.Empty); var response = request.GetResponse(); request.Abort(); var response2 = (HttpWebResponse)response; if (response2.StatusCode == HttpStatusCode.Found && response2.Headers["Location"] != null) { //302跳转,这里需要重新发起一个请求来访问location指定的url,递归当前方法就可以实现
}
这是项目中的部分代码,只能贴这些了
@沧海一杰: 要是能有读取“淘宝秒杀验证码”并能自动回填的功能,那就牛X了,网上似乎没有人能做得出来!如果做出来,相信每个卖1000元,也非常好卖!
我关注了很久,现在关于 淘宝网 站上的特殊技术处理,似乎只有人做到以下两项:
1. “试用网站”中的回答问题,能自动搜索正确答案
2. " 秒杀“ 时,只能做到倒计时提前1-2秒显示出问题,但还得自己手动回答问题,但可以做到回答了问题,马上自动提交!!!(可这效率还是不高)
不明觉厉!
................ 一般出现这种情况是 目标站点检测到 当前的HTTP请求为机器人,如果需要获取HTML页面准确的内容可以去园子里面找找大神写的 封装类库
特别提醒 获取 百度 淘宝等网站的HTML源码 一般都封杀IP地址 出现的情况的原因是请求过快