【问题标题】:python requests: easy way to replace http get request argument?python请求:替换http get请求参数的简单方法?
【发布时间】:2014-11-19 09:30:59
【问题描述】:

我有一个这样的 http GET 请求:

url = 'www.somedomain.com/content?var=whatever&pageno=1'
r = requests.get(url)

我想用pageno=2 替换pageno=1,他们说requests 是为人类设计的,但如果不使用urlparse 将查询解析为pyhton 字典,我无法弄清楚如何做到这一点,然后改变对应的值,然后urllib.urlencode变成一个新的查询。

通知

我知道我可能可以做一个re.sub() 并在 2 或 3 行内解决问题,我只是认为必须有一个“pythonic 方式”。

过去几个月我一直在使用scrapy,他们有一个很好的Request.replace 方法来执行此操作,我想我会向requests 推荐一个功能。

【问题讨论】:

  • 所以你已经想出了如何做到这一点。我肯定会推荐 urlparse/urlencode 方法而不是正则表达式,除非你必须在一个循环中执行数千个,在这种情况下我猜你应该尝试不同的方法并对它们进行基准测试
  • 注意关注点的分离:requests 用于发出请求,当标准库已经提供 URL 解析功能时,它不需要提供。
  • Well requests 确实有 params 参数,这可能有助于使它更容易一些。

标签: python http get python-requests


【解决方案1】:

您可以利用get() 方法的params 参数。这个功能在quick start

>>> payload = {'var': 'whatever', 'pageno': '1'}
>>> r = requests.get("http://www.somedomain.com/content", params=payload)
>>> print(r.url)
http://www.somedomain.com/content?var=whatever&pageno=1

使用这种传递参数的方法,您可以在调用.get()之前轻松操作payload字典

【讨论】:

    【解决方案2】:

    我总是以简单的方式来做 - 尽管总是有多种方法可以做同样的事情。

    首先使用一些逻辑使脚本找到最大编号。页数,然后,

    max_page=10 # You need to find a way to get this, for now assuming its 10 for example purpose
    current_page=0
    while current_page!=max_page:
        current_page=current_page+1
        url = 'www.somedomain.com/content?var=whatever&pageno=%s'%str(current_page)
        r = requests.get(url)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-12-04
      • 2015-05-17
      • 2015-02-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多