首页 新闻 会员 周边

采集 关于HTML新闻列表地址获取,和乱码处理

0
悬赏园豆:40 [已解决问题] 解决于 2014-09-15 17:00

问题1  获取HTML页面存在乱码  请问有什么好的方式了?

常规的获取
1  HTTP请求头返回的编码  错误的
2 获取HTML页面标签当中设置的编码 <meta charset="utf-8"/>   错误的

3.开源组建NUniversalCharDet这个通过计算字符串编码百分比获取 这个稍微靠谱点但是还是会出错。
以上都是经过本人长上时间测试过了的。
请问各位大虾有什么号的解决方案。

问题2  获取任意列表页面的 内容页地址
  例如:获取博客园首页   博文列表当中  文章的具体地址
  或者:获取网易新闻页面 列表当中  新闻的具体地址

希望各位大虾能提供点思路
如何去获取页面当中的 内容页 的地址

如果有不清楚的请各位见谅哈....

还有就是没分了....就只有这点了

问题补充:

以上都是 要做采集用的  页面都是面向整个互联网  

落幕残情的主页 落幕残情 | 初学一级 | 园豆:34
提问于:2014-08-28 15:49
< >
分享
最佳答案
0
string url=url地址; 
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
                    request.Accept = "*/*"; //接受任意文件
                    request.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.1.4322)"; // 模拟使用IE在浏览 http://www.52mvc.com
                    request.AllowAutoRedirect = true;//是否允许302
                    //request.CookieContainer = new CookieContainer();//cookie容器,
                    request.Referer = url; //当前页面的引用


                    HttpWebResponse response = (HttpWebResponse)request.GetResponse();
                    Stream stream = response.GetResponseStream();
                    StreamReader reader = new StreamReader(stream, Encoding.GetEncoding("utf-8"));       //此处转换编码
                    html = reader.ReadToEnd();

获取源代码之后 再用正则表达式 截取就行了

欺世 | 初学一级 |园豆:2 | 2014-08-28 16:52

同学 你这种方式不对头,在大规模抓取页面的时候 百分之百有乱码页面  而且用正则获取页面  肯定有问题

落幕残情 | 园豆:34 (初学一级) | 2014-08-28 18:43

@落幕残情: request.UserAgent 在采集的时候 最好用 谷歌或者百度的  用IE  10个页面就被屏蔽

落幕残情 | 园豆:34 (初学一级) | 2014-08-28 18:48

@落幕残情: 先抓取页面源代码,再转换编码,再用正则,不行吗?

欺世 | 园豆:2 (初学一级) | 2014-08-29 09:22

@欺世: 肯定不行,测试了N回  不信你可以试试   还有C#的正则是个坑爹货

落幕残情 | 园豆:34 (初学一级) | 2014-08-29 10:16
其他回答(3)
0

能提供下你获取错误编码的页面url吗?

收获园豆:20
牧师/preacher | 园豆:500 (菜鸟二级) | 2014-08-28 17:01

没有具体页面    面向整个互联网

支持(0) 反对(0) 落幕残情 | 园豆:34 (初学一级) | 2014-08-28 18:45

@落幕残情: 没有通用的,只有合适的,不可能有一种写法可以满足所有的需求。做过网络监控,对你提的东西还是很熟悉的。

你上面写的那么多条错误,我也看不懂,不过我可以说下浏览器HttpWebRequest调用返回必不可少的几项内容:1.编码格式(浏览器解析使用);2.内容(可能是文本,也可能是压缩数据GZIP)3.返回的内容格式(如果已压缩,解压数据使用)

至于传入什么 就像一楼的说的那样,可能

//request.CookieContainer = new CookieContainer();//cookie容器,如果是帐号登录 ,里面要放入凭证等验证请求用户什么的一些其他特征,浏览器中可获取

request.Referer = url; //当前页面的引用,大多数情况下可有可无,不过有些会做验证,主要验证域名是否匹配

以及当前浏览器模式:request.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.1.4322)";

支持(0) 反对(0) 牧师/preacher | 园豆:500 (菜鸟二级) | 2014-08-28 22:24

@小尧弟: 你好 你分析的有道理,目前我只能做到 百分之95以上的页面正常解析,只是希望找到更好的解决方案,例如IE的智能编码解析  火狐的开源编码解析组建 都可以通用  但是解析得不上很准确  谢谢你的回答

支持(0) 反对(0) 落幕残情 | 园豆:34 (初学一级) | 2014-08-29 10:18
0

编码转换,内容用正则

收获园豆:20
Qlin | 园豆:2403 (老鸟四级) | 2014-08-28 17:17
0

关注这个博客很久了,写的教程很多,关键是教程好细致 
推荐给你看看 
youmumzcs的专栏 
http://blog.csdn.net/youmumzcs?viewmode=contents

sosozzzx | 园豆:302 (菜鸟二级) | 2016-09-18 17:06
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册