我的脚本在Google应用引擎的localhost上运行完美,但在部署脚本时会在云端显示以下错误(appspot.com):
"错误:服务器错误
服务器遇到错误,无法完成您的请求
请在30秒后再试一次。"
这是我的代码:
import webapp2
import sys
sys.path.insert(0, 'libs')
import requests
from bs4 import *
import re
import smtplib
from google.appengine.api import urlfetch
from google.appengine import runtime
class MainHandler(webapp2.RequestHandler):
def get(self):
self.response.write("hello")
#urlfetch.set_default_fetch_deadline(60)
def spider():
count = 1
href = 'www.example.com'
while count <= 2:
new_url = href
new_source_code = urlfetch.fetch(new_url, deadline=60)
new_plain_text = new_source_code.content
new_soup = BeautifulSoup(new_plain_text)
for new_link in new_soup.find_all('table'):
for new_link1 in new_link.find_all('a'):
new_href = 'www.example.com' + new_link1.get('href')
new1_url = new_href
new1_source_code = urlfetch.fetch(new1_url, deadline=60)
new1_plain_text = new1_source_code.content
new1_soup = BeautifulSoup(new1_plain_text)
for new1_link in new1_soup.find_all('tbody'):
for new1_link1 in new1_link.find_all('a', attrs={'class': 'title'}):
new1_title = new1_link1.string
new1_title = new1_title.strip()
new1_href = 'www.example.com' + new1_link1.get('href')
self.response.write(new1_title)
self.response.write(new1_href)
count = count + 1
spider()
app = webapp2.WSGIApplication([
('/', MainHandler)
], debug=True)
我只是想通过抓取来打印网址,我可以在部署后看到本地主机上的网址而不是应用引擎上的网址,这显示我的错误。
答案 0 :(得分:2)
对于自动缩放App Engine模块,截止日期为60秒。在您的示例代码中,您有两个URL获取请求,每个请求都在一个循环中,每个请求的截止时间为60秒。假设您没有运行基本扩展或手动扩展实例,您可能会发现在60秒后您看到此异常。即使远程主机上的一次超时也会导致您超出前端截止日期。
This page将为您提供不同实例缩放类型的截止日期。
但是,您可能希望使用任务队列来帮助将工作分解为可管理的“可重试”块。
答案 1 :(得分:2)
Google App Engine中的每个请求的最高硬限制为60秒,因此,如果长度超过此值,您将获得DeadlineExceededError
。
如果你知道你要求的前期需要花费更多时间,那么你将不得不使用Tasks API来运行长达10分钟的事情。最后,如果你想要更长的东西,可以查看Backends API,你可以运行24小时。