2015-07-30 2 views
0

Пытаясь следовать примеру в этом одном:Извлечение печенье из открытой сессии Safari в Python

Python urllib2 login to minecraft.net

Я пытаюсь получить файлы с этого сайта, и это утомительный процесс нажатия, чтобы добраться до каждого файл. Я мог бы легко использовать urllib2 для webscrape, но, конечно, вы должны войти на этот сайт, чтобы получить данные. Я попытался сделать один из подходов типа входа в Python, но я не могу заставить его работать.

Другой вариант - экспортировать файлы cookie из сеанса Safari, чтобы я мог запускать свои скрипты webcraping, чтобы получить нужные мне данные.

Кто-нибудь знает, как экспортировать файлы cookie из сеанса Safari в Python для доступа к данным веб-сайта?

+0

Используйте https://www.getpostman.com/, чтобы увидеть печенье и все звонки вы делаете, но вам нужен Chrome, чтобы использовать его – heinst

+0

Также почему бы не использовать запросы объекта Session, чтобы иметь банку cookie и использовать также методы HTTPAuth? – heinst

+0

@heinst эй спасибо! можете ли вы связать меня с примером способа использования объектов сеансов запросов? –

ответ

0

Это позволит вам войти в систему и загрузить файл, это использует BeautifulSoup и запросы:

#!/usr/bin/python 
from bs4 import BeautifulSoup 
import requests 


def download_file(url): 
    local_filename = url.split('/')[-1] 
    # NOTE the stream=True parameter 
    r = requests.get(url, stream=True) 
    with open(local_filename, 'wb') as f: 
     for chunk in r.iter_content(chunk_size=1024): 
      if chunk: # filter out keep-alive new chunks 
       f.write(chunk) 
       f.flush() 
    return local_filename 

s = requests.Session() 

soup = BeautifulSoup(s.get("https://minecraft.net/login").content) 

authToken = soup.find('form', attrs={'id': 'loginForm'}).findNext('input')['value'] 

data = { 
    "username": "USERNAME", 
    "password": "PASSWORD", 
    "remember": "true", 
    "authenticityToken": authToken 
} 

s.post("https://minecraft.net/login", data=data) 
soup = BeautifulSoup(s.get("https://minecraft.net//download").content) 
download_file(soup.find("div", attrs={'id': 'platform-osx'}).findNext('p').findNext('')['href'])