欢迎来到天天文库
浏览记录
ID:18752957
大小:338.50 KB
页数:24页
时间:2018-09-22
《页面抓取时应该注意到的几个问题》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、一:网页更新 我们知道,一般网页中的信息是不断翻新的,这也要求我们定期的去抓这些新信息,但是这个“定期”该怎么理解,也就是多长时间需要抓一次该页面,其实这个定期也就是页面缓存时间,在页面的缓存时间内我们再次抓取该网页是没有必要的,反而给人家服务器造成压力。就比如说我要抓取博客园首页,首先清空页面缓存,从Last-Modified到Expires,我们可以看到,博客园的缓存时间是2分钟,而且我还能看到当前的服务器时间Date,如果我再次刷新页面的话,这里的Date将会变成下图中 If-Modified-Since,然后发送给服务器,判断浏览器的缓存有没有过期?最后服务器发
2、现If-Modified-Since>=Last-Modifined的时间,服务器也就返回304了,不过发现这cookie信息真是贼多啊。。。在实际开发中,如果在知道网站缓存策略的情况下,我们可以让爬虫2min爬一次就好了,当然这些都是可以由数据团队来配置维护了,好了,下面我们用爬虫模拟一下。1usingSystem;2usingSystem.Net;34namespaceConsoleApplication25{6publicclassProgram7{8staticvoidMain(string[]args)9{10DateTimeprevDateTime=DateTi
3、me.MinValue;1112for(inti=0;i<10;i++)13{14try15{16varurl="http://www.3344mm.com";1718varrequest=(HttpWebRequest)HttpWebRequest.Create(url);1920request.Method="Head";2122if(i>0)23{24request.IfModifiedSince=prevDateTime;25}2627request.Timeout=3000;2829varresponse=(HttpWebResponse)request.GetR
4、esponse();3031varcode=response.StatusCode;3233//如果服务器返回状态是200,则认为网页已更新,记得当时的服务器时间34if(code==HttpStatusCode.OK)35{36prevDateTime=Convert.ToDateTime(response.Headers[HttpResponseHeader.Date]);37}3839Console.WriteLine("当前服务器的状态码:{0}",code);40}41catch(WebExceptionex)42{43if(ex.Response!=null)4
5、4{45varcode=(ex.ResponseasHttpWebResponse).StatusCode;4647Console.WriteLine("当前服务器的状态码:{0}",code);48}49}50}51}52}53} 二:网页编码的问题 有时候我们已经抓取到网页了,准备去解析的时候,tmd的全部是乱码,真是操蛋,比如下面这样,或许我们依稀的记得在html的meta中有一个叫做charset的属性,里面记录的就是编码方式,还有一个要点就是response.CharacterSet这个属性中同样也记录了编码方式,下面我们再来试试看。艹,居然还是乱码,蛋疼了,
6、这次需要到官网上面去看一看,到底http头信息里面都交互了些什么,凭什么浏览器能正常显示,爬虫爬过来的就不行。查看了http头信息,终于我们知道了,浏览器说我可以解析gzip,deflate,sdch这三种压缩方式,服务器发送的是gzip压缩,到这里我们也应该知道了常用的web性能优化。1usingSystem;2usingSystem.Collections.Generic;3usingSystem.Linq;4usingSystem.Text;5usingSystem.Threading;6usingHtmlAgilityPack;7usingSystem.Text.R
7、egularExpressions;8usingSystem.Net;9usingSystem.IO;10usingSystem.IO.Compression;1112namespaceConsoleApplication213{14publicclassProgram15{16staticvoidMain(string[]args)17{18//varcurrentUrl="http://www.xeneihan.com/";1920varcurrentUrl="http://www.niuaba.com/";2
此文档下载收益归作者所有