通用问题
我正在尝试使用Python从投资者商业日报(IBD)收集股票数据。我的目标是获取一个股票列表,并为列表中的每个代码获取数据。我感兴趣的具体页面是IBD所称的股票检查。此页面仅供付费订阅者查看(我正在使用免费试用)。
规范
我试图使用请求库登录到会话,然后使用.get访问库存检查页面。Python版本3.7
import requests
headers = {"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:66.0) Gecko/20100101 Firefox/66.0", "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", "Accept-Language": "en-US,en;q=0.5", "Accept-Encoding": "gzip, deflate", "DNT": "1", "Connection": "close", "Upgrade-Insecure-Requests": "1"}
LOGIN = 'https://myibd.investors.com/secure/signin.aspx?login'
PROTECTED_PAGE = 'https://research.investors.com/stock-checkup/nasdaq-applied-materials-inc-amat.aspx'
payload = {
'username': 'blahblah@gmail.com'
,'password': 'secretpw'
}
with requests.session() as s:
s.post(LOGIN, data=payload, headers = headers)
response = s.get(PROTECTED_PAGE, headers = headers)
print(response.text)从其他文章中,我学会了在html中查找登录表单,以查找用户名、密码和其他输入的特定标记名。这就是我如何找到上述有效载荷的信息。我相信也有隐藏的投入,使这比我希望的更困难。__VIEWSTATE)。我收到的回复文本表明,我没有登录,也没有关于感兴趣的股票(AMAT)的具体信息。
有更好的方法吗?我也尝试过使用Selenium,但这也有问题。IBD网站真的很难登录吗?还是我遗漏了什么?我花了无数个小时在这上面,所以任何帮助都是非常感谢的!
发布于 2022-08-16 12:00:54
首先,您使用不正确的端点进行身份验证。
如果该网站没有提供专门的开发人员API,您将被限制在uses应用程序本身使用的任何东西上。
LOGIN = 'https://myibd.investors.com/secure/signin.aspx?login' -这里是用户输入凭据的页面。它本身不接受也不希望接受员额请求。
每当用户输入creds并按SUBMIT按钮时,webapp就会向实际的身份验证端点发出请求。
您可以在“网络”部分的开发人员面板中查看浏览器发出的请求。对于IBD,请求似乎是以以下有效负载(表单数据)转到https://login.investors.com/accounts.login的:
loginID: afds@asdf.vsd
password: asdfasdgasdfasdfasdf
sessionExpiration: 31536000
targetEnv: jssdk
include: profile,data,emails,subscriptions,preferences,
includeUserInfo: true
loginMode: standard
lang: en
riskContext: {"yadda": "yadda-yadda"}
APIKey: XXXXXXXXXXXXXXX
source: showScreenSet
sdk: js_latest
authMode: cookie
pageURL: https://myibd.investors.com/register/signin-iframe.aspx?checkauth=true&display=&t=1660650471
sdkBuild: 13318
format: json那么这个有效载荷中的字段是什么--你的猜测可能比我的更好。但是,在尝试围绕它构建程序之前,您必须确定确切的请求响应乒乓和所有字段的含义。您的代码甚至不检查身份验证尝试的返回代码--您甚至不知道是否已成功登录或只是将凭据发送到某个地方。
https://stackoverflow.com/questions/66664809
复制相似问题