代码之家  ›  专栏  ›  技术社区  ›  Daniel Strong

使用Python更改URL中的查询

  •  1
  • Daniel Strong  · 技术社区  · 7 年前

    我需要更新URL的查询部分(page\u index=)。我尝试了以下几种方法,但遇到了麻烦。我是python新手,正在寻找指导。页面索引范围从0到511(每天添加新内容),我需要更新url以循环所有索引。索引始终从0开始。

    import urlparse
    
    url = 'https://api.appannie.com/v1.2/apps/ios/app/331177714/reviews?
    start_date=2016-1-01&end_date=2017-8-26&page_index=0&countries=US'
    parts = urlparse.urlparse(url)
    parts = parts._replace(query = page_index [2])
    parts.geturl()
    

    TypeError Traceback (most recent call last)
    <ipython-input-29-066332f37bb3> in <module>()
      3 url = 'https://api.appannie.com/v1.2/apps/ios/app/331177714/reviews?start_date=2016-1-01&end_date=2017-8-26&page_index=0&countries=US'
      4 parts = urlparse.urlparse(url)
    ----> 5 parts = parts._replace(query = page_index [2])
      6 parts.geturl()
      7
    TypeError: 'function' object has no attribute '__getitem__'
    
    2 回复  |  直到 7 年前
        1
  •  1
  •   rd_nielsen    7 年前

    你必须拔出 query 并对其进行修改,然后重建一个新的URL,如下所示:

    pr = urlparse.urlparse(url)
    parts = pr.query.split('&')
    parts[2] = 'page_index=2'
    new_url = urlparse.urlunparse([pr.scheme, pr.netloc, pr.path, pr.params, "&".join(parts), pr.fragment])
    

        2
  •  1
  •   Hugh Bothwell    7 年前

    最简单的方法是直接修改url:

    base_url = "https://api.appannie.com/v1.2/apps/ios/app/331177714/reviews?start_date=2016-1-01&end_date=2017-8-26&page_index={}&countries=US"
    
    for pi in range(512):
        this_url = base_url.format(pi)
        # now get it
    

    一种稍微复杂但更容易定制的方式,将参数作为dict传递:

    import requests
    
    url = "https://api.appannie.com/v1.2/apps/ios/app/331177714/reviews"
    params = {
        "start_date": "2016-1-01",
        "end_date"  : "2017-8-26"
        "countries" : "US"
    }
    
    for pi in range(512):
        params["page_index"] = pi
        res = requests.get(url, params)
        if res.ok:
            html = res.text