首页 新闻 会员 周边

读取URL网页的HTML代码怎么读取不到,望高人指点

0
悬赏园豆:50 [已关闭问题] 关闭于 2016-01-17 10:01
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的主页 Ewin | 初学一级 | 园豆:17
提问于:2014-01-11 10:39
< >
分享
所有回答(6)
0

你换个网址测试一下 就可以 淘宝的 特殊处理了

wolfy | 园豆:2636 (老鸟四级) | 2014-01-11 12:15

 就是想解决这个问题

支持(0) 反对(0) Ewin | 园豆:17 (初学一级) | 2014-01-11 12:29

@Ewin: 写了一个方法 可以获取到可以加我qq734209936

支持(0) 反对(0) wolfy | 园豆:2636 (老鸟四级) | 2014-01-13 10:12
0

更简单的是:

WebClient webClient = new WebClient();
string html = System.Text.Encoding.UTF8.GetString(webClient.DownloadData("http://www.cnblogs.com"));

 

你要贴下你的错误信息。!

幻天芒 | 园豆:37175 (高人七级) | 2014-01-11 12:20

同出错,就是aa="";  aa为空

支持(0) 反对(0) Ewin | 园豆:17 (初学一级) | 2014-01-11 12:30

没出错,就是aa="";  aa为空

支持(0) 反对(0) Ewin | 园豆:17 (初学一级) | 2014-01-11 12:30

@Ewin: 这种可能是淘宝单方面的限制,你测试下其他的网站呢~

支持(0) 反对(0) 幻天芒 | 园豆:37175 (高人七级) | 2014-01-11 12:57

@幻天芒: 我要采集淘宝数据

支持(0) 反对(0) Ewin | 园豆:17 (初学一级) | 2014-01-11 13:13

@Ewin: 设置cookie等方式,模拟用户访问呗。

支持(0) 反对(0) 幻天芒 | 园豆:37175 (高人七级) | 2014-01-11 13:52

@幻天芒: 设置cookie等方式,模拟用户访问呗。  能有具体的CODE不?

支持(0) 反对(0) Ewin | 园豆:17 (初学一级) | 2014-01-11 16:46

@Ewin: 你用Chrome 的F12,然后访问淘宝的页面。查看请求的所有参数,然后仿照这个参数进行设置请求。

支持(0) 反对(0) 幻天芒 | 园豆:37175 (高人七级) | 2014-01-11 23:04

@幻天芒:  这就是正确答案!!!!!!!!!!!!!

支持(0) 反对(0) 新阿伦 | 园豆:41 (初学一级) | 2014-01-12 11:00
0

建议加上UserAgent试试

dudu | 园豆:30979 (高人七级) | 2014-01-11 14:27
0

System.Net.WebRequest rt = System.Net.WebRequest.Create(Url);

给你的rt把headers加了,先用fiddler看下浏览器访问时都带了哪些标头,都加到headers里,再把Cookie也加上,当然有一部分Cookie是httpOnly的,获取要费一番工夫,特别是模拟登录后的用户访问,这个几乎是必须的。代码嘛,你上面的代码其实已经没问题了,返回后的结果你可能还得转码,网页编码返回后有可能有乱码。 你还要观察网站是否有302跳转之类的,如果有的话,那上在的代码得改成递归访问。

空明流光 | 园豆:106 (初学一级) | 2014-01-11 21:38
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,递归当前方法就可以实现
}

这是项目中的部分代码,只能贴这些了

支持(0) 反对(0) 空明流光 | 园豆:106 (初学一级) | 2014-01-11 21:45

@沧海一杰:  要是能有读取“淘宝秒杀验证码”并能自动回填的功能,那就牛X了,网上似乎没有人能做得出来!如果做出来,相信每个卖1000元,也非常好卖!

支持(0) 反对(0) 新阿伦 | 园豆:41 (初学一级) | 2014-01-12 11:02

我关注了很久,现在关于  淘宝网 站上的特殊技术处理,似乎只有人做到以下两项:

 

1. “试用网站”中的回答问题,能自动搜索正确答案

 

2. " 秒杀“ 时,只能做到倒计时提前1-2秒显示出问题,但还得自己手动回答问题,但可以做到回答了问题,马上自动提交!!!(可这效率还是不高)

支持(0) 反对(0) 新阿伦 | 园豆:41 (初学一级) | 2014-01-12 11:06
0

不明觉厉!

大楚打码人 | 园豆:4313 (老鸟四级) | 2014-01-13 10:54
0

................  一般出现这种情况是 目标站点检测到 当前的HTTP请求为机器人,如果需要获取HTML页面准确的内容可以去园子里面找找大神写的 封装类库   
特别提醒  获取 百度  淘宝等网站的HTML源码  一般都封杀IP地址    出现的情况的原因是请求过快

落幕残情 | 园豆:34 (初学一级) | 2014-01-13 16:02
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册