缓存网页

实现每个链接都能独立缓存,如果存在直接读取,如果不存在,则获取网页,然后系列化后保存到本地

目录功能比较简单:后续可能会改进

#!/usr/bin/env python
#coding:utf-8
#Created by Andy @ 2017/6/28

import os
import hashlib
import urllib.request
import random
import time
import gzip
import pickle

# 简单的反防爬,每次随机选下header
headers = [{‘User-Agent‘: ‘Mozilla/5.0 (Windows NT 6.3 WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Maxthon/4.4.8.1000 Chrome/30.0.1599.101 Safari/537.36‘},
           {‘User-Agent‘: ‘Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:45.0) Gecko/20100101 Firefox/45.0‘},
           {‘User-Agent‘: ‘Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 10.0; WOW64; Trident/7.0)‘}]

def cache_html(url, header):
	# 根据不同链接产生不同的哈希值,并以此为文件名,保证一链接一缓存文件
	md = hashlib.md5()
	md.update(url.encode(encoding=‘utf8‘))
	file_name = md.hexdigest()

	# 判断缓存文件是否已经存在,如果存在就直接读取缓存文件
	path = os.path.join(base_path, file_name)
	if os.path.exists(path) and os.path.getsize(path):
		print("Cache file already exist!")
		with open(path, ‘rb‘) as read_f:
			html = pickle.load(read_f)
			try:
				html = gzip.decompress(html).decode(‘utf8‘) # 有些网站的数据经过压缩了
			except:
				html = html.decode(‘utf8‘)
	else:
		req = urllib.request.Request(url, headers=header)
		html = urllib.request.urlopen(req).read()

		if not req or not html:
			print("Connection failed...")
		else:
			time.sleep(random.randint(1, 3))

			with open(file_name, ‘wb‘) as write_f:
				pickle.dump(html, write_f)

		try:
			html = gzip.decompress(html).decode(‘utf8‘)
		except:
			html = html.decode(‘utf-8‘)

	return html

if __name__ == ‘__main__‘:
	header = random.choice(headers)

	base_path = os.path.dirname(os.path.abspath(__file__))

	url = ‘http://www.python.org‘
	html = cache_html(url, header)
	print(html)
时间: 2024-10-02 08:56:14

缓存网页的相关文章

Android WebView 实现缓存网页数据

WebView中存在着两种缓存:网页数据缓存(存储打开过的页面及资源),H5缓存(即AppCache). 将我们浏览过的网页url已经网页文件(css.图片.js等)保存到数据库表中 缓存模式(5种)LOAD_CACHE_ONLY:  不使用网络,只读取本地缓存数据LOAD_DEFAULT:  根据cache-control决定是否从网络上取数据.LOAD_CACHE_NORMAL: API level 17中已经废弃, 从API level 11开始作用同LOAD_DEFAULT模式LOAD_

Apache的压缩与缓存-----网页优化

一.Apache网页的压缩 定义:对apache服务器发布的网页内容进行压缩后再发送到客户端的浏览器.减少了网络传输用时,也加快了网页加载的速度. mod_gzip 模块与mod_deflate 模块 1.两者均使用gzip压缩算法,运作原理类似2.mod_deflate 压缩速度略快,而mod_gzip 的压缩比略高3.mod_gzip 对服务器CPU的占用要高- -些4.高流量的服务器,使用mod_deflate 可能会比mod_gzip 加载速度更快 实验走起 1.代码步骤如下: [[em

Apache网页优化,网页压缩和网页缓存技术

网页压缩 网站的访问速度是由多个因素共同决定的,这些因素包括应用程序的响应速度.网络带宽.服务器性能.与客户端之间的网络传输速度等.其中一个最重要的因素是Apache本身的响应速度,当网站性能不佳时,第一个需要着手处理的便是尽可能提升Apache的执行速度,使用网页压缩可以提升应用程序的速度.而且最重要的是,完全不需要任何成本,只不过是会让服务器CPU占用率稍微提升. 网页缓存 网页缓存是将一部分经常不会改变或变动很少的页面缓存,下次浏览器再次访问这些页面时,不需要再次去下载这些页面,从而提高用

[超详细] Apache网页优化:网页压缩与网页缓存超详细

前言 前两篇文章讲了Aapche的访问控制与日志分析,这篇文章会重点讲Apache的网页优化,比如:网页的压缩.网页的缓存.我们在使用Aapche作为Web服务器的过程中,只有对Aapche服务器进行适当的优化配置,才能让它发挥出更好好的性能,因此,我们需要对Aapche服务器的配置优化! 网页压缩 凡是总会有个为什么,我们为什么要对网页进行压缩,带着这个问题来看接下来的操作.我们也常常上网,会知道网站的访问速度的快慢有很多因素,比如:应用程序的响应速度.网络带宽.服务器性能等!最重要的一个因素

Apache网页优化与安全优化(网页压缩;网页缓存;网页防盗链;隐藏版本信息)

1,网页压缩 网站的访问速度是由多个因素所共同决定的包括: 1)应用程序的响应速度 2)网络带宽 3)服务器性能 4)与客户端之间的网络传输速度等等 其中最重要的就是Apache本身的响应速度,因此提升网站性能第一个需要着手进行处理的便是尽可能地提升Apache的执行速度,使用网页压缩可以提升应用程序的速度,而且不需要任何成本. Apache的压缩模块 Apache2.x内建了mod_deflate这个模块,使用gzip压缩算法.mod_deflate可使用DeflateCompressionL

PHP禁止浏览器缓存

一.对于静态页(就是通过meta标签来设置): <!--expires用于设定网页的过期时间,一旦过期就必须从服务器上重新加载.时间必须使用GMT格式--> <meta http-equiv="expires" content="0" /> 或者通过pragma no-cache来设置,pragma出现在http-equiv属性中,使用content属性的no-cache值表示是否缓存网页(为了提高速度一些浏览器会缓存浏览者浏览过的页面,通过

打造支持apk下载和html5缓存的 IIS(配合一个超简单的android APP使用)具体解释

为什么要做这个看起来不靠谱的东西呢? 由于刚学android开发,还不能非常好的熟练控制android界面的编辑和操作,所以我的一个急着要的运用就改为html5版本号了,反正这个运用也是须要从server获取大量数据来展示在手机上面的,也就是说:必须联网,才干正常工作,于是想了一下,反正都要联网获取数据,为什么不直接用我相对熟悉一点的 html来做这个运用呢?省的花费不够用的时间去学习android界面的控制,于是就简单了:用蹩脚的手段做了一个android程序的启动欢迎界面,内页就是一个全屏的

【缓存】系统缓存全解析 (上)

有时候总听到网友说网站运行好慢,不知如何是好:有时候也总见到一些朋友写的网站功能看起来非常好,但访问性能却极其的差.没有"勤俭节约"的意识,势必会造成"铺张浪费".如何应对这种情况,充分利用系统缓存则是首要之道. 系统缓存有什么好处呢?举个简单的例子,你想通过网页查询某些数据,而这些数据并非实时变化,或者变化的时间是有期限的.例如查询一些历史数据.那么每个用户每次查的数据都是一样的.如果不设置缓存,ASP.NET也会根据每个用户的请求重复查询n次,这就增加了不必要的

防止页面客户端被缓存

许多浏览器为了能快速向用户展示所请求的页面,会把来自服务器的网页存放在客户端的缓存中,如果用户多次 请求访问服务器端的同一个网页,并且在客户端的缓存中年已经存在该网页,那么浏览器只需要从缓存中获取该网页 ,并不需要在请求访问远程服务器上的网页 浏览器端的缓存技术适用于保存服务器端的静态网页,以及不包含敏感数据的网页,一下情形中,服务器往往 不希望客户端被浏览器缓存: (1)网页包含随时会被更新的动态内容,因为如果浏览器向用户展示本地缓存中的网页,有可能展示的是过期的网页 (2)网页中包含敏感的数