【问题标题】:Retrieving HTML from a URL on Heroku从 Heroku 上的 URL 检索 HTML
【发布时间】:2017-09-13 23:45:11
【问题描述】:

我使用 Heroku 来托管我的电报机器人。 该机器人的目的是从网页中检索 html 并将其转换为 pdf。

成功在线托管后,我尝试向机器人发送 URL,但它在发送获取请求时冻结/停止。

代码:

logger.info('retrieving HTML = {}'.format(url))
page_html = requests.get(url)

logger.info('retrieved HTML')
logger.info('started HTML parsing')
soup = BeautifulSoup(page_html.text, 'html.parser')

在 Heroku 日志中,我只看到 retrieving HTML = <URL>,而应用程序没有显示任何活动迹象。

我尝试使用 heroku 控制台(可从 heroku 网页访问)连接到 dyno(heroku 上的应用程序本身),并输入以下代码:

import requests
# url of a recepie
url = 'https://pikabu.ru/story/pirog_quotlen__matushkaquot_5332461'
html = requests.get(url)

在 heroku 控制台中执行此代码也需要很长时间并且没有完成(没有错误,没有消息,我可以使用 crtl+c 停止进程,执行永远不会完成),我不确定是什么可能是问题所在。

提前感谢您,任何提示或帮助将不胜感激。

【问题讨论】:

标签: python heroku https python-requests


【解决方案1】:

如果没有从您的日志中看到信息,或者没有了解您要抓取的页面有多大,我猜您正在达到 Heroku 的 30 秒超时。

来自the Dev Center article on timeouts

然后,您的应用程序必须在测功机中处理该请求, 并在 30 秒内将响应发送回路由器 避免超时。

我会在运行脚本时检查您的日志 (heroku logs -t -a yourAppName) 并查找超时错误代码 h12。或者,如果您使用的是业余爱好或更高版本的测功机,您可以在仪表板上查看application metrics

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多