我在python中编写一个代码,它执行以下操作: 1)从互联网上获取一个html文件。 2)提取其网址。 3)将这些网址与搜索关键字进行比较,并打开用户想要打开的正确网页。 我使用以下代码:
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文件的更新/更改。
答案 0 :(得分:1)
听起来你确实想要缓存页面,但你也想检查自上次下载以来没有任何变化。
If-Modified-Since HTTP标头是您努力的朋友。在发出HTTP GET请求时,您可以在上次下载页面时提供该标题字段。如果从那时起服务器上的页面没有更改,服务器将返回304 Not Modified状态代码,不会发送页面内容,从而省去了再次下载的麻烦。
以下是在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
可能存储在磁盘上。
答案 1 :(得分:0)
您可以将htmls与时间戳一起存储,只有在html太旧时才下载html。