【问题标题】:Python Cookies in Requests - Grabbing Session Id请求中的 Python Cookie - 获取会话 ID
【发布时间】:2021-05-27 16:40:03
【问题描述】:

我正在尝试从请求中的网站获取 cookie,以便可以在我的标头中使用它。我能够打印 cookie,但我不能使用 find() 将“Session-Id”只保存到我的标题中

这里是代码

import requests


url = "WEBSITE-URL"
r = requests.get(url).cookies
print(r)

现在输出是这样的

<RequestsCookieJar[<Cookie Session-Id=YK9Ox7Zop04blxaps2LlogAGFE5 for .website.com/>, <Cookie Version=default for website.com/>]>

我怎样才能只获取此输出的“Session-Id”部分。我尝试了一些不同的方法,但它不断向我抛出错误消息。

【问题讨论】:

    标签: python cookies python-requests


    【解决方案1】:

    requests.get(url).cookies 返回网站设置的所有 cookie 的列表。如果你想访问第一个 cookie,你可以这样做:

    import requests
    
    
    url = "WEBSITE-URL"
    r = requests.get(url).cookies
    print(r[0])
    

    如果您想从此 cookie 访问特定值(在您的情况下为 Session-Id),您可以这样做:

    import requests
    
    
    url = "WEBSITE-URL"
    r = requests.get(url).cookies
    print(r[0].Session-Id)
    

    【讨论】:

    • 不起作用。抛出错误 'KeyError: 'name=0, domain=None, path=None'' 由于某种原因很难从 cookie 响应中获取某些内容:/
    • print(r.items()[0].Session-Id) 代替 print(r[0].Session-Id) 有效吗?
    • Nope :/ 它给出了“AttributeError: 'tuple' object has no attribute 'Session' 我明白你在做什么,它不起作用是没有意义的。还有奇怪的事情像 find() 这样简单是行不通的。
    • r.get_dict()['Session-Id'] 也可以。
    • 成功了!它没有包含“Session-Id=”,但它打印了实际的 ID,这很重要。谢谢大佬!
    【解决方案2】:
    • 方法一:

    使用selenium+phantomjs无接口访问url,然后获取cookie值:

    from selenium import webdriver
     
    driver=webdriver.PhantomJS()
    #url="https://et.xiamenair.com/xiamenair/book/findFlights.action?lang=zh&tripType=0&queryFlightInfo=XMN,PEK,2018-01-15"
    url = "https://www.bing.com/"
    driver.get(url)
    # get cookie list
    cookie_list=driver.get_cookies()
    # format print cookie
    for cookie in cookie_list:
        cookie_dict[cookie['name']]=cookie['value']
    
    • 方法二:

    使用cookielib:

    (1)Python2

    import cookielib
    import urllib2
    # Url = "https://et.xiamenair.com/xiamenair/book/findFlights.action?lang=zh&tripType=0&queryFlightInfo=XMN,PEK,2018-01-15"
    Url = "https://www.bing.com/"
    cj = cookielib.CookieJar()
    opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
    urllib2.install_opener(opener)
    resp = urllib2.urlopen(Url)
    for index, cookie in enumerate(cj):
        print '[',index, ']',cookie
    

    (2)Python3

    from urllib import request
    from http import cookiejar
    
    # skip SSL verify
    import ssl
    # set ignore ssl verify
    ssl._create_default_https_context = ssl._create_unverified_context
    
    if __name__ == '__main__':
        # define cookiejar object
        cookie = cookiejar.CookieJar()
        # urllib.request HTTPCookieProcessor CookieHandler
        handler=request.HTTPCookieProcessor(cookie)
        # from CookieHandler create opener
        opener = request.build_opener(handler)
        # open url
        response = opener.open('http://www.baidu.com')
        # print cookie
        for item in cookie:
            print('Name = %s' % item.name)
            print('Value = %s' % item.value)
    
    • 方法3:

    使用请求:

    Python3

    def getCookie():
        url = "****"
        Hostreferer = {
            # 'Host':'***',
            'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36'
        }
        # urllib requests
        html = requests.get(url, headers=Hostreferer,verify=False)
        # cookie:DZSW_WSYYT_SESSIONID
        if html.status_code == 200:
            print(html.cookies)
            for cookie in html.cookies:
                print(cookie)
    

    【讨论】:

    • 问题仍然存在。它打印出的不仅仅是 Session-Id。我需要从中获取 Session-Id 响应。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-31
    • 2023-03-11
    • 2020-06-06
    • 2021-10-24
    • 1970-01-01
    • 2015-12-14
    • 1970-01-01
    相关资源
    最近更新 更多