【问题标题】:Google URL Builder in PythonPython 中的 Google URL 构建器
【发布时间】:2014-08-20 18:57:32
【问题描述】:

我正在尝试将 Google URL Builder 的功能添加到我的应用程序中。

https://support.google.com/analytics/answer/1033867?hl=en

很遗憾,我不确定得到确切的结果..

我的代码

        def buildurl(url):

            #take out old url builder
            url = sub('\?utm_source=.*?(&|$)utm_medium=.*?(&|$)|utm_term=.*?(&|$)|utm_content=.*?(&|$)|utm_campaign=.*?(&|$)','',url)

            #build url
            header += '?utm_source=' + self.data['source']
            header += '&utm_medium=' + self.data['medium']
            header += '&utm_campaign=' + self.data['campaign']

            #return long url
            return(url header + urllib.quote(header)

我的代码返回这个: http://iipdigital.usembassy.gov/st/english/article/2014/08/20140813305633.html#axzz3ANwb5XD?utm_source=source&utm_medium=medi&utm_campaign=testu

Google 的 URL 构建器返回: http://iipdigital.usembassy.gov/st/english/article/2014/08/20140813305633.html?utm_source=source&utm_medium=medi&utm_campaign=test#axzz3ANwb5XDu

我可以将 #axzz3ANwb5XDu 推到后面,但是有没有办法以标准化的方式解析和重构 url?

【问题讨论】:

    标签: python string url


    【解决方案1】:

    您应该查看urlparse 模块。我已经修改了您的代码,使其删除了现有的 url 构建器部分,但保留了查询的任何其他部分。

    from urlparse import urlparse, urlunparse
    
    def buildurl(url):
    
        #take out old url builder.
        url = sub('utm_source=.*?(&|$)utm_medium=.*?(&|$)|utm_term=.*?(&|$)|utm_content=.*?(&|$)|utm_campaign=.*?(&|$)','',url)
    
    
        #Parse the url.        
        o = urlparse(url)
    
        #build url query.
        query = o.query
        query += 'utm_source=' + self.data['source']
        query += '&utm_medium=' + self.data['medium']
        query += '&utm_campaign=' + self.data['campaign']
    
        #return the url with the corrected query.
        return urlunparse(o.scheme, o.netloc, o.path, o.params, query, o.fragment)
    

    fragment 应该在网址的末尾。

    【讨论】:

      【解决方案2】:

      我会选择 Python 的 urllib - 它是一个内置库。

      import urllib.parse
      
      getVars = {'var1': 'some_data', 'var2': 1337}
      url = 'http://domain.com/somepage/?'
      
      print(url + urllib.parse.urlencode(getVars))
      

      输出:

      http://domain.com/somepage/?var2=1337&var1=some_data
      

      【讨论】:

        【解决方案3】:

        有一种方法可以解析 URL;它被称为urlparse:

        try:
            from urllib.parse import urlparse, urlunparse
        except ImportError:  # Python 2.x
            from urlparse import urlparse, urlunparse
        
        
        def buildurl(url):
            scheme, netloc, path, params, query, fragment = urlparse(url)
        
            #take out old url builder
            query = sub('\?utm_source=.*?(&|$)utm_medium=.*?(&|$)|utm_term=.*?(&|$)|utm_content=.*?(&|$)|utm_campaign=.*?(&|$)', '', query)
        
            #build url
            query += '?utm_source=' + self.data['source']
            query += '&utm_medium=' + self.data['medium']
            query += '&utm_campaign=' + self.data['campaign']
            return urlunparse((scheme, netloc, path, params, query, fragment))
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-11-16
          • 1970-01-01
          • 2021-02-02
          • 2021-12-17
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多