用googleappengin在python中获取大量url

2024-10-06 11:18:15 发布

您现在位置:Python中文网/ 问答频道 /正文

在RequestHandler的子类中,我尝试获取URL的范围:

class GetStats(webapp2.RequestHandler):
    def post(self): 

    lastpage = 50   
    for page in range(1, lastpage):
        tmpurl = url + str(page)
        response = urllib2.urlopen(tmpurl, timeout=5)
        html = response.read()
        # some parsing html
        heap.append(result_of_parsing)  

    self.response.write(heap)

但它可以使用30个url(页面加载很长,但它是有效的)。 如果超过30,我会收到一个错误:

错误:服务器错误

服务器遇到错误,无法完成您的请求。

请在30秒后重试。

有没有办法获取大量的网址?可能是更优的还是smth? 多达几百页?在

更新:

我用BeautifulSoup来解析每一页。我在gae日志中找到了这个回溯:

^{pr2}$

Tags: self服务器urlresponsehtml错误page子类
2条回答

编辑: 可能来自于附加的配额和限制。 很抱歉之前的回答:

因为这看起来像是服务器的保护,以避免ddos或从一个客户端报废。你几乎没有选择:

  • 在一定数量的查询之间等待,然后继续。

  • 从多个具有不同IP地址的客户机发出请求并将信息发送回主脚本(为此租用不同的服务器可能会很昂贵…)。

  • 你也可以观察网站是否作为api访问你需要的数据。

你也应该小心,因为如果店主认为你的请求不好,他会封锁/黑名单你的IP。在

它失败了,因为你只有60秒的时间向用户返回一个响应,我猜这需要更长的时间。在

您将要使用这个:https://cloud.google.com/appengine/articles/deferred

创建有10分钟超时的任务。然后,您可以立即返回给用户,他们可以在稍后通过另一个处理程序(您创建的)来“获取”结果。如果收集所有的网址需要10分钟以上的时间,你将不得不把它们分成更多的任务。在

看这个:https://cloud.google.com/appengine/articles/deadlineexceedederrors

去理解为什么你不能超过60秒。在

相关问题 更多 >