我正在用python编写代码,它可以完成以下工作: 1)从internet获取html文件。2)提取其urls。3)将这些urls与搜索键进行比较,并打开用户希望打开的正确的网页。我使用以下代码:
def open_page(name):
try:
links = lxml.html.parse('http://www.w3schools.com/html/').xpath("//a/@href")
for url in links:
if re.search(name, url):
self.get_webpage.open('http://www.w3schools.com/html/'+url)
break
except IndexError as e:
pass`
我不得不在我的模块中多次调用这个方法,这使得打开网页的过程非常缓慢。我试着检查这个方法的每一行的执行时间,并且知道lxml.html.parse()大部分时间都在消耗。另外,如果我尝试使用一些存储在本地系统中的html文件,这种方法可以快速工作。是否有任何方式可以从缓存第一次从这个网页http://www.w3schools.com/html/的html文件?附注:我不想将这个html文件永久保存在我的本地系统中,因为在这种情况下,我可能会错过这个html文件上的更新/更改。
发布于 2013-07-23 17:36:03
听起来你确实想要缓存页面,但是你也想检查一下,自从你上次下载页面以来,没有任何变化。
如果-修改-自 header是您在这方面的朋友。在发出HTTP请求时,可以为该标头字段提供上次下载页面的时间。如果从那时起,服务器上的页面没有改变,服务器将返回一个304未修改状态代码,并且不会发送页面内容,从而避免了再次下载它的麻烦。
下面是如何在Python 2中这样做:
import contextlib
import datetime
import urllib2
with contextlib.closing(urllib2.urlopen(urllib2.Request(
"http://www.w3schools.com/html/",
headers={"If-Modified-Since": last_access_time}))) as u:
if u.getcode() != 304:
cached_html = lxml.html.parse(u)
last_access_time = datetime.datetime.now()
html = cached_html
last_access_time
和cached_html
很可能存储在磁盘上。
发布于 2013-07-23 17:16:49
您可以使用时间戳将html存储在一起,并且只有在html太旧的情况下才可以下载html。
https://stackoverflow.com/questions/17823574
复制相似问题