【发布时间】:2013-08-21 01:01:17
【问题描述】:
我目前正在学习网络抓取并构建一个简单的网络应用程序,我决定练习抓取课程表。这是我在应用程序中遇到问题的代码 sn-p,使用 Python 2.7.4、Flask、Heroku、BeautifulSoup4 和 Requests。
import requests
from bs4 import BeautifulSoup as Soup
url = "https://telebears.berkeley.edu/enrollment-osoc/osc"
code = "26187"
values = dict(_InField1 = "RESTRIC", _InField2 = code, _InField3 = "13D2")
html = requests.post(url, params=values)
soup = Soup(html.content, from_encoding="utf-8")
sp = soup.find_all("div", {"class" : "layout-div"})[2]
print sp.text
这在本地效果很好。它按预期返回字符串“Computer Science 61A P 001 LEC:”。但是,当我尝试在 Heroku 上运行它时(使用 heroku run bash 然后运行 python),我得到了一个错误,403 Forbidden。
我是否缺少 Heroku 上的某些设置?起初我以为是学校设置,但后来我想知道为什么它在本地运行没有任何问题......任何解释/建议将不胜感激!提前谢谢你。
【问题讨论】:
-
我相信 403 错误来自 CSRF 问题。
-
谢谢,这意味着我应该无法获得有关 Heroku 的信息?我已经搜索并找到了这个flask.pocoo.org/snippets/3,但我不确定它与我现在需要的东西有多大关系
-
我不太了解 Heroku,但我知道 Django,其中应该提供 CSRF 令牌作为表单中的隐藏字段。这样 Django 就知道表单是可以安全阅读的。我认为您的要求从那里缺少这种安全性。 当我尝试在 Heroku 上运行它时 是什么意思?您是否尝试使用位于 Heroku 上的脚本从外部网站获取字符串?
-
是的,完全正确。我在heroku上部署了我的应用程序,但它没有做任何事情(Chrome开发工具说POST请求中有问题),所以我缩小了问题范围,在heroku的shell中制作了一个小脚本,我在上面发布的部分给出了错误。
-
那么我相信您的问题是 Heroku 特有的。可能确实缺少一些设置。您可以随时联系 Heroku 支持,抱歉,我无法为您提供更多帮助。
标签: python-2.7 heroku beautifulsoup python-requests