【问题标题】:Easies way to avoid timeout on webscraping app? Heroku Flask app避免网络抓取应用程序超时的最简单方法? Heroku Flask 应用程序
【发布时间】:2020-05-16 22:22:30
【问题描述】:

我正在开发一个 Flask 应用程序,我在其中从多个 URL 进行网络抓取(范围很广,可以超过 100 个)。它在本地工作,但是当部署到 Heroku 时,它会超时。

这是我正在使用的代码的 sn-p,其中 bookOutletHas() 函数是使用请求和 BeautifulSoup 进行网络抓取的函数。

for book in gr_books:
    temp_book = book.book
    title = temp_book["title"]
    author = temp_book["authors"]["author"]["name"]
    arr = bookOutletHas(title=title, author=author)
    if arr[0]:
        valid_books += [ str(arr[1]) ]
return render_template("main_page.html",books=valid_books)

我的第一个直觉是找到一种对其进行编码的方法,以便在每次更新 valid_books 数组时更新页面(比如每次都重新渲染模板?)但我不确定如何处理这个问题。我对javascript一无所知,所以如果可能的话,我正在寻找一种通过Python和HTML的方法。

【问题讨论】:

  • 发生抓取的请求超时?
  • @robinsax 完成 POST 请求时超时。根据日志,我看到它成功地抓取了数组的前几个元素。所以我不认为是抓取功能花费了太长时间,而是它有很多 URL 可以点击?

标签: python flask heroku web-scraping


【解决方案1】:

您可以配置您的环境以允许处理请求的时间更长。有关详细信息,请参阅 how to set http request timeout in python flask

但是,这比您应该在请求线程中完成的工作要多得多。更好的方法是在后台定期进行抓取并缓存结果,然后在处理请求时从缓存中读取。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多