【问题标题】:Posting form data with requests and python使用请求和 python 发布表单数据
【发布时间】:2018-08-21 01:33:43
【问题描述】:

发布表单数据不起作用,并且由于我关于此的其他帖子不起作用,我想我会尝试再次提出这个问题,所以也许我可以获得另一个观点。我目前正在尝试让requests.get(url, data=q) 工作。打印时,找不到页面。我只是设置变量并将它们加入整个 URL 以使其工作,但我真的想了解有关 requests 的这方面。我在哪里犯错?我正在为表单使用 HTML 标记属性 name=search_terms 和 name=geo_location_terms。

search_terms = "Bars"
location = "New Orleans, LA"
url = "https://www.yellowpages.com"
q = {'search_terms': search_terms, 'geo_locations_terms': location}
page = requests.get(url, data=q)
print(page.url)

【问题讨论】:

    标签: python python-requests


    【解决方案1】:

    您的代码中有一些小错误:

    1. 检查表单的 action 参数。然后url = "https://www.yellowpages.com/search"
    2. 第二个参数是geo_location_terms 而不是geo_locations_terms。
    3. 您应该将requests.get 中的查询参数作为params 传递,而不是作为请求数据(data)。

    所以,最终版本的代码:

    import requests
    
    search_terms = "Bars"
    location = "New Orleans, LA"
    url = "https://www.yellowpages.com/search"
    q = {'search_terms': search_terms, 'geo_location_terms': location}
    page = requests.get(url, params=q)
    print(page.url)
    

    结果:

    https://www.yellowpages.com/search?search_terms=Bars&geo_location_terms=New+Orleans%2C+LA
    

    【讨论】:

    • 那么当使用requests.get() 时使用'params' 而当requests.post() 使用data 来传递值?
    • @Kamikaze_goldfish 不是真的,但通常是这样。检查this answer。
    【解决方案2】:

    除了@Lev Zakharov 指出的问题,您还需要在请求中设置 cookie,如下所示:

    import requests
    
    search_terms = "Bars"
    location = "New Orleans, LA"
    url = "https://www.yellowpages.com/search"
    
    with requests.Session() as session:
        session.headers.update({
            'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36',
            'Cookie': 'cookies'
        })
    
        q = {'search_terms': search_terms, 'geo_locations_terms': location}
        response = session.get(url, params=q)
    
        print(response.url)
        print(response.status_code)
    

    输出

    https://www.yellowpages.com/search?search_terms=Bars&geo_locations_terms=New+Orleans%2C+LA
    200
    

    要获取 cookie,您可以使用某些网络侦听器查看请求,例如使用 Chrome 开发人员工具的网络选项卡,然后替换值 'cookies'

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-05
      • 2014-06-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-14
      • 2022-11-15
      • 1970-01-01
      • 2017-02-11
      相关资源
      最近更新 更多