我使用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停止进程,执行永远不会完成),我不知道是什么可能是问题。
提前感谢您,任何提示或帮助都将不胜感激。
答案 0 :(得分:0)
如果没有从您的日志中看到信息,或者想要了解您要抓取的页面有多大,我的猜测就是您正在使用Heroku的30秒超时。
来自the Dev Center article on timeouts:
然后您的申请必须在dyno中处理请求, 并在30秒内将响应传送回路由器 避免超时。
我会在运行脚本时检查您的日志(heroku logs -t -a yourAppName
)并查找h12
这是超时错误代码。或者如果您使用的是业余爱好或以上的dynos,您可以在仪表板上查看application metrics。