Python 3.x 如何减少请求数量并仅使用一个?
我的程序执行以下操作:Python 3.x 如何减少请求数量并仅使用一个?,python-3.x,beautifulsoup,python-requests,Python 3.x,Beautifulsoup,Python Requests,我的程序执行以下操作: 从我的网站获取XML 运行所有的URL 通过请求从我的网页(SKU、名称、标题、价格等)获取数据 通过将相同SKU的价格与请求进行比较,从其他网站获得最低价格 我在每个def上使用了大量请求: def get_Price (SKU): check ='https://www.XXX='+SKU r = requests.get(check) html = requests.get(r.url) bsObj = BeautifulSoup(h
def get_Price (SKU):
check ='https://www.XXX='+SKU
r = requests.get(check)
html = requests.get(r.url)
bsObj = BeautifulSoup(html.content,'html.parser')
return Price
def get_StoreName (SKU):
check ='https://XXX?keyword='+SKU
r = requests.get(check)
html = requests.get(r.url)
bsObj = BeautifulSoup(html.content,'html.parser')
return storeName
def get_h1Tag (u):
html = requests.get(u)
bsObj = BeautifulSoup(html.content,'xml')
h1 = bsObj.find('h1',attrs={'itemprop':'name'}).get_text()
return h1
如何减少URL的请求数或连接数,并在整个程序中使用一个请求或一个连接 我假设这是一个脚本,其中包含一组按特定顺序调用的方法。 如果是这样,这是一个很好的
dict
用例。我将编写一个函数来记忆对URL的调用
然后,您可以在其他函数中重用此函数:
requests\u cache={}
def get_url(url,格式解析器):
如果url不在请求\u缓存中:
r=请求。获取(url)
html=requests.get(r.url)
请求\u缓存[url]=美化组(html.content,格式\u解析器)
返回请求\u缓存[url]
def get_价格(makat):
url='1〕https://www.zap.co.il/search.aspx?keyword=“+makat
bsObj=get_url(url'html.parser')
#你的代码可以找到价格
返回许可证
def get_zapStoreName(makat):
url='1〕https://www.zap.co.il/search.aspx?keyword=“+makat
bsObj=get_url(url'html.parser')
#您的代码用于查找商店名称
返回店名
def get_H1标签(u):
bsObj=获取url(u,'xml')
h1=bsObj.find('h1',attrs={'itemprop':'name'})
返回h1
如果要避免使用全局变量,还可以将requests\u cache
设置为get\u url
的属性或定义中的默认参数。后者还允许您通过传递空的dict
绕过缓存
同样,这里的假设是,您定期将此代码作为脚本运行。在这种情况下,每次运行程序时,请求\u缓存将被清除
但是,如果这是较大程序的一部分,您可能希望定期“终止”缓存,否则每次都会得到相同的结果。我假设这是一个脚本,其中包含一组按特定顺序调用的方法。
如果是这样,这是一个很好的dict
用例。我将编写一个函数来记忆对URL的调用
然后,您可以在其他函数中重用此函数:
requests\u cache={}
def get_url(url,格式解析器):
如果url不在请求\u缓存中:
r=请求。获取(url)
html=requests.get(r.url)
请求\u缓存[url]=美化组(html.content,格式\u解析器)
返回请求\u缓存[url]
def get_价格(makat):
url='1〕https://www.zap.co.il/search.aspx?keyword=“+makat
bsObj=get_url(url'html.parser')
#你的代码可以找到价格
返回许可证
def get_zapStoreName(makat):
url='1〕https://www.zap.co.il/search.aspx?keyword=“+makat
bsObj=get_url(url'html.parser')
#您的代码用于查找商店名称
返回店名
def get_H1标签(u):
bsObj=获取url(u,'xml')
h1=bsObj.find('h1',attrs={'itemprop':'name'})
返回h1
如果要避免使用全局变量,还可以将requests\u cache
设置为get\u url
的属性或定义中的默认参数。后者还允许您通过传递空的dict
绕过缓存
同样,这里的假设是,您定期将此代码作为脚本运行。在这种情况下,每次运行程序时,请求\u缓存将被清除
但是,如果这是大型程序的一部分,您可能希望定期“终止”缓存,否则每次都会得到相同的结果。只是澄清一下,您希望减少对特定位置(所有内容都相同)或具有不同URL的一台服务器的请求数吗?“到URL”听起来像前者,“整个程序的一个连接”就像latterhi一样,因为我是python的新手——我已经为我想要的每个参数构建了def——我能一次获得所有吗?这将减少我的处理时间?您的多个请求中的URL是否相同?如果是,下面的答案很好,如果不是,它只会增加额外的工作。只是澄清一下,您想减少到特定位置(所有内容都相同)或具有不同URL的服务器的请求数吗?“到URL”听起来像前者,“整个程序的一个连接”就像latterhi一样,因为我是python的新手——我已经为我想要的每个参数构建了def——我能一次获得所有吗?这将减少我的处理时间?您的多个请求中的URL是否相同?如果是,下面的答案很好,如果不是,它只会增加额外的事情要做。嗨,谢谢。是-我定期运行脚本。但是我在我的网站地图的所有url上运行它。那么这里的缓存很好?如果我会使用它-缓存不会是来自上一个请求的数据?嗨。缓存的请求应该是好的。缓存将包含对相同url上相同请求的响应。对不同URL或具有不同参数的请求不会相互覆盖。每次运行程序时,都会重新初始化请求\u缓存。因此,每次运行程序时,您都会获得新的数据(太棒了!)谢谢现在我需要让程序运行得更快…:)嗨,谢谢。是-我定期运行脚本。但是我在我的网站地图的所有url上运行它。那么这里的缓存很好?如果我会使用它-缓存不会是来自上一个请求的数据?嗨。缓存的请求应该是好的。缓存将包含对相同url上相同请求的响应。对不同URL或具有不同参数的请求不会相互覆盖。每次运行程序时,都会重新初始化请求\u缓存。因此,每次运行程序时都会获得新的数据