c#抓取网页数据(比如说我要抓取博客园首页(一)())
优采云 发布时间: 2021-10-22 06:00c#抓取网页数据(比如说我要抓取博客园首页(一)())
一:网页更新
我们知道一般网页中的信息是不断更新的,这也需要我们定期抓取这些新信息,但是如何理解这个“规律”,即抓取页面需要多长时间,在其实这个时间段就是Page cache时间。在页面缓存期间,我们没有必要再次抓取网页,但会对其他人的服务器造成压力。
比如我想抓取博客园的首页,先清除页面缓存,
从 last-modified 到 expires 可以看到博客园的缓存时间是 2 分钟,而且我还可以看到当前服务器时间日期,如果我再做一次
如果刷新页面,这里的日期会变成下图中的if-modified-since,然后发送到服务器判断浏览器的缓存是否已经过期?
最后服务端发现if-modified-since >= last-modifined时间,服务端也返回了304,但是发现cookie信息真的是很多小偷。
在实际开发中,如果知道网站的缓存策略,就可以让爬虫每2分钟爬一次。当然,这些可以由数据团队进行配置和维护。好,下面我们就用爬虫。模拟它。
二:网页编码问题
有时候我们已经抓取了网页,准备解析的时候,tmd全是乱码,真他妈的,比如下面这样,
或许我们依稀记得html的meta中有一个叫做charset的属性,里面记录了编码方式。还有一点很重要,response.characterset 属性也记录了编码方式。让我们再试一次。
代码还是乱码,蛋疼。这个时候需要去官网看看http头信息里面交互的是什么。为什么浏览器能正常显示,爬虫爬不过去。
查看http头信息后,我们终于知道浏览器说我可以解析gzip、deflate和sdch这三种压缩方式。服务器发送 gzip 压缩。至此,我们也应该知道常用的web性能优化了。
三:网页分析
经过一番折腾,现在网页已经得到了,接下来就要解析了。当然,正则匹配是一个不错的方法。毕竟工作量还是比较大的。或许业界也推崇解析工具htmlagilitypack,它可以将html解析成xml,然后可以使用xpath提取指定的内容,大大提高了开发速度,性能也不错。毕竟,敏捷意味着敏捷。关于xpath的内容,看懂w3cschool的两张图就可以了。
好了,结束工作,去睡觉吧。. .