使用python请求进行etrade抓取不希望使用跨域URL

时间:2014-08-31 22:28:32

标签: python cookies cross-domain python-requests

试图从etrade中获取一些基本的股票信息(我知道他们有一个api但我想先把它弄清楚)并且我可以通过请求模块通过登录:

import requests
from bs4 import BeautifulSoup, Comment
symbol = 'A'
payload = {'USER':etradeUsername, 'PASSWORD':etradePassword, 'countrylangselect':'us_english', 'TARGET':'/e/t/pfm/portfolioview'}
with requests.Session() as c:
    c.post('https://us.etrade.com/login.fcc', data=payload)
    r=c.get('https://us.etrade.com/e/t/pfm/portfolioview')
    #r=c.get('https://www.etrade.wallst.com/v1/stocks/snapshot/snapshot.asp?symbol=' + symbol + '&rsO=new')

    etradeMarkup = BeautifulSoup(r.text)
    #print r.headers
    file1 = open("etrade.html","w")
    file1.write("<html><body><head><meta charset='UTF-8'></head>" + str(etradeMarkup.prettify().encode("utf-8")) + "</body></html>")
    file1.flush()
    file1.close()

文件写入让我看看刮刀得到了什么。

我可以看到投资组合页面很好,所以我知道登录正常。注释掉的下一行是我的目标页面。使用浏览器成功登录后,我可以看到www.etrade.wallst.com ...页面,但刮刀只会被重定向到etrade.com登录页面。

我认为会话传输或cookie变量在我的浏览器知道如何处理的域之间移动但我的代码没有。

我的python和http知识处于死胡同,我希望有人可以指出我正确的方向来弄清楚如何编程克服这个困难。

非常感谢您提供的任何帮助。 (python和刮刮新手所以请善待:)

1 个答案:

答案 0 :(得分:0)

我发现还有另一个页面需要设置cookie。我假设推送到etrade登录页面是因为需要来自etrade登录后部分的cookie,但我错了。我根本不需要etrade登录这个页面,只是另一个页面来获取cookie。通过添加查看https://us.etrade.com/e/t/invest/markets?ploc=c-MainNav的行,我能够获取查看目标页面所需的数据,而不会强制我的程序返回登录页面。

with requests.Session() as c:

    #  adding this line was the key
    c.get('https://us.etrade.com/e/t/invest/markets?ploc=c-MainNav') 

    r=c.get('https://www.etrade.wallst.com/v1/stocks/snapshot/snapshot.asp?symbol=' + symbol + '&rsO=new')

    etradeMarkup = BeautifulSoup(r.text)