如何在python中获取会话cookie
我正在尝试使用python从站点下载一个文件,该文件只能在您登录后下载,看起来还可以!但当我真正尝试下载文件时,我只收到一个文本文件,上面说我必须登录。我相信我需要得到PHPSESSID 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:
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