【问题标题】:Issue in extracting Titanic training data from Kaggle using Jupyter Notebook使用 Jupyter Notebook 从 Kaggle 中提取泰坦尼克号训练数据的问题
【发布时间】:2018-11-24 14:05:39
【问题描述】:

我正在尝试使用 Jupyter Notebook 提取泰坦尼克号训练和测试数据。在下面找到我的代码 sn-p。

payload = {
    'action': 'login',
    'username': os.environ.get("KAGGLE_USERNAME"),
    'password': os.environ.get("KAGGLE_PASSWORD")
}

url = "https://www.kaggle.com/c/3136/download/train.csv"

with session() as c:
    c.post('https://www.kaggle.com/account/login', data=payload)
    response = c.get(url)
    print(response.text)

执行此操作后,我得到的是 HTML 响应而不是训练数据。我也在 .env 文件中正确配置了我的 Kaggle 登录凭据。我在这里做错了吗?

【问题讨论】:

  • 您收到的 HTML 响应是什么?您可能只需要解析响应。您正在发出 HTML 请求,因此 HTML 响应是很自然的接收方式。
  • 以下内容: Kaggle:你的数据科学之家
  • 响应太大,无法在此处发布。
  • 好的,这可以理解。同样,您发出了一个 HTTP 请求并收到了一个 HTTP 响应——完全正常。您需要解析出您感兴趣的数据。您究竟想从响应中提取什么?
  • 请注意,由于您可能会在 python 中解析 HTML,因此您应该查看有助于处理此类事情的库。有一些存在 - 我个人喜欢pythonhosted.org/pyquery

标签: python


【解决方案1】:

您感兴趣的网站使用 AntiForgeryTokens 来防止诸如跨域请求伪造之类的事情。您的登录不成功,这就是您的脚本无法正常工作的原因。 AF 代币是一个障碍,但没有什么是我们无法用 Python 的魔力克服的。我创建了一个帐户,并使用以下脚本成功提取了您想要的 CSV 数据。注意:我必须解析 AntiForgeryToken,我的代码有点乱,但它可以工作。

import requests

payload = {
    '__RequestVerificationToken': '',
    'username': 'OMITTED',
    'password': 'OMITTED',
    'rememberme': 'false'
}

loginURL = 'https://www.kaggle.com/account/login'
dataURL = "https://www.kaggle.com/c/3136/download/train.csv"

with requests.Session() as c:
    response = c.get(loginURL).text
    AFToken = response[response.index('antiForgeryToken')+19:response.index('isAnonymous: ')-12]
    print("AntiForgeryToken={}".format(AFToken))
    payload['__RequestVerificationToken']=AFToken
    c.post(loginURL + "?isModal=true&returnUrl=/", data=payload)
    response = c.get(dataURL)
    print(response.text)

【讨论】:

  • 非常感谢您的帮助。我会尝试让你知道它是否适合我。
  • 我试过了,又得到了 HTML 响应。我需要使用 BeautifulSoup 提取身体吗?请告诉我正确的语法。
  • 首先通过站点登录并手动下载数据集,HTML 响应可能是对您不会滥用站点的确认。在您接受免责声明后,这应该会起作用。
  • 你是绝对正确的。在我接受免责声明后,代码运行良好。数据正确显示。非常感谢您的帮助。
  • 我很高兴能提供帮助。我喜欢在 python 中编写这样的脚本。请将答案标记为已解决,如果您认为答案令人满意,请考虑投赞成票。
猜你喜欢
  • 2022-01-03
  • 1970-01-01
  • 2019-03-01
  • 2016-06-19
  • 2020-10-25
  • 2017-06-27
  • 2017-03-12
  • 2021-07-29
  • 2019-02-28
相关资源
最近更新 更多