gpt4 book ai didi

python - 如何使用Python通过mechanize实现网页抓取后的结果缓存

转载 作者:行者123 更新时间:2023-12-01 04:55:20 25 4
gpt4 key购买 nike

我的网页抓取脚本是用 Python 编写的,利用了 mechanize。这就是我的脚本的样子:(替换了敏感信息)

import mechanize
import cookielib
from bs4 import BeautifulSoup
import html2text
import json

br = mechanize.Browser()
cj = cookielib.LWPCookieJar()
br.set_cookiejar(cj)
br.set_handle_equiv(True)
br.set_debug_responses(True)
br.set_handle_gzip(True)
br.set_handle_redirect(True)
br.set_handle_referer(True)
br.set_handle_robots(False)
br.set_handle_refresh(mechanize._http.HTTPRefreshProcessor(), max_time=1)
br.addheaders = [('User-agent', 'Safari/8.0')]
br.open('https://example.com/login.jsp')
for f in br.forms():
print f
br.select_form(nr=0)
br.form['u'] = 'abcd'
br.form['p'] = '1234'
br.submit()

def get_information():
locations=[]
data=json.load(br.open('https://example.com/iWantThisJson.jsp'))
for entry in data["stores"]:
location=entry["name"].split("(",1)[0]
locations.append(location)
return locations

登录后,我的 get_information() 方法检索商店位置列表,并将它们切成我想要的位置后,我将它们保存到字典位置中。此方法在我使用 Flask 构建的网站中调用,在 localhost 上运行此时此刻。这是我的网站代码中调用它的位置:

class reportDownload(Form):
locations={}
locations=get_information()
locations_names=list(enumerate(locations))
location=SelectField(u'Location',choices=locations_names)

此列表显示在我网站上的下拉菜单中,供用户选择选项。

我的问题是如何对从 get_information() 方法收到的结果实现缓存,因为我不想每次访问网页(使用信息的地方)时都执行网页抓取用户(这是相当频繁的,因为它是主页之一)。我曾尝试寻找如何实现缓存,但由于我对此还很陌生,因此我无法理解需要做什么。如果有人能给我指出相关示例,我将不胜感激!

谢谢! :)

最佳答案

如果其他人访问此线程,抓取时缓存的另一个不错的选择(如果您使用 requests)是 requests-cache 模块。

它是请求的插件,经过几行配置后,它将为您处理缓存。

import requests
import requests_cache

requests_cache.install_cache('name/of/cache'
backend='mongdb',
expire_after=3600)

# use requests as usual

如上面的示例所示,该模块允许我们轻松定义缓存名称、后端和过期时间。

关于python - 如何使用Python通过mechanize实现网页抓取后的结果缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27560007/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com