如何在python中获取会话cookie

如何在python中获取会话cookie,python,cookies,Python,Cookies,我正在尝试使用python从站点下载一个文件,该文件只能在您登录后下载,看起来还可以!但当我真正尝试下载文件时,我只收到一个文本文件,上面说我必须登录。我相信我需要得到PHPSESSID cookie并使用它,但我不知道如何使用它。这是我的密码: from BeautifulSoup import BeautifulSoup import re import requests import sys class LegendasTV(object): URL_BUSCA = 'http:

我正在尝试使用python从站点下载一个文件,该文件只能在您登录后下载,看起来还可以!但当我真正尝试下载文件时,我只收到一个文本文件,上面说我必须登录。我相信我需要得到PHPSESSID cookie并使用它,但我不知道如何使用它。这是我的密码:

from BeautifulSoup import BeautifulSoup
import re
import requests
import sys

class LegendasTV(object):
    URL_BUSCA = 'http://legendas.tv/legenda/busca/%s/1'

    URL_DOWNLOAD = 'http://legendas.tv/downloadarquivo/%s'

    URL_LOGIN = 'http://legendas.tv/login'

    def __init__(self, usuario, senha):
        self.usuario = usuario
        self.senha = senha
        self.cookie = None

        self._login()

    def _login(self):
        s = requests.Session()
        url = self.URL_LOGIN
        payload = {'data[User][username]': self.usuario, 'data[User][password]': self.senha, "data[lembrar]": "on"}
        r = s.post(url, payload)
        html = r.content

        if "<title>Login - Legendas TV</title>" in html:
            return 0
        else:
            print 'Success login!'
            return 1

    def _request(self, url, method='GET', data=None):
        if method == 'GET':
            r = requests.get(url, stream=True)
        if method == 'POST' and data:
            r = requests.post(url, data=data)

        return r

    def search(self, q, lang='pt-br', tipo='release'):
        if not q:
           pass # raise exception

        if not lang or not self.LEGENDA_LANG.get(lang):
           pass # raise exception

        if not tipo or not self.LEGENDA_TIPO.get(tipo):
           pass # raise exception

        busca = { 'txtLegenda': q,
                  'int_idioma': self.LEGENDA_LANG[lang],
                  'selTipo':    self.LEGENDA_TIPO[tipo] }

        r = self._request(self.URL_BUSCA % q, method='POST', data=busca)
        if r:
            legendas = self._parser(r.text)
        else: 
            pass # raise exception

        return legendas

    def _parser(self, data):
        legendas = []

        html = BeautifulSoup(data)
        results = html.findAll("a")
        for result in results:
            if result.get("href") is not None and "S09E16" in result.get("href"):
                path_href = result.get("href").split("/")
                unique_id_download = path_href[2]
                url = self.URL_DOWNLOAD % unique_id_download

    def download(self, url_da_legenda):
        r = self._request(url_da_legenda)
        if r:
            with open("teste.rar", 'wb') as handle:
                print u'Baixando legenda:', url_da_legenda
                handle.write(r.content)

如果有任何帮助,我将不胜感激。

在这个答案的帮助下,我终于找到了答案

我试图直接使用cookies,但session似乎已经完成了繁重的部分,并为我们解决了这个问题。以下是我的代码中需要更新的部分:

def _login(self):
    s = requests.Session()
    url = self.URL_LOGIN
    payload = {'data[User][username]': self.usuario, 'data[User][password]': self.senha, "data[lembrar]": "on"}
    r = s.post(url, payload)
    html = r.content

    if "<title>Login - Legendas TV</title>" in html:
        return 0
    else:
        print 'Success on login!'
        self.session = s

        return 1

def _request(self, url, method='GET', data=None):
    if self.session:
        if method == 'GET':
            r = self.session.get(url, cookies=self.cookie, stream=True)
        if method == 'POST' and data:
            r = self.session.post(url, data=data, cookies=self.cookie)

        return r
def\u登录(自):
s=请求。会话()
url=self.url\u登录
有效负载={'data[User][username]':self.usuario,'data[User][password]':self.senha,“data[lembrar]”:on“}
r=s.post(url,有效负载)
html=r.content
如果在html中显示“登录-Legendas TV”:
返回0
其他:
打印“登录成功!”
self.session=s
返回1
def_请求(self,url,method='GET',data=None):
如果self.session:
如果方法=='GET':
r=self.session.get(url,cookies=self.cookie,stream=True)
如果方法==“POST”和数据:
r=self.session.post(url,data=data,cookies=self.cookie)
返回r
def _login(self):
    s = requests.Session()
    url = self.URL_LOGIN
    payload = {'data[User][username]': self.usuario, 'data[User][password]': self.senha, "data[lembrar]": "on"}
    r = s.post(url, payload)
    html = r.content

    if "<title>Login - Legendas TV</title>" in html:
        return 0
    else:
        print 'Success on login!'
        self.session = s

        return 1

def _request(self, url, method='GET', data=None):
    if self.session:
        if method == 'GET':
            r = self.session.get(url, cookies=self.cookie, stream=True)
        if method == 'POST' and data:
            r = self.session.post(url, data=data, cookies=self.cookie)

        return r