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

我的程序执行以下操作:

  • 从我的网站获取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(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缓存。因此,每次运行程序时都会获得新的数据