Python 使用urllib和beautifulsou时出现随机HTTP 503错误

Python 使用urllib和beautifulsou时出现随机HTTP 503错误,python,web-scraping,beautifulsoup,urllib2,urllib,Python,Web Scraping,Beautifulsoup,Urllib2,Urllib,我正在用cookies抓取一个网站。它们提供了多个下拉菜单,我正在遍历每个选项,并在每个请求中重新捕获会话cookie。代码在一段时间内运行正常,但我随机得到一个503错误 我的代码将数据插入到PostgreSQL数据库中,为了帮助强调此错误的随机性,我想与大家分享,在插入了1200个条目(行)和4200个条目之后,我收到了503。提出这个例外似乎并没有任何模式。我搞不懂 如果有帮助,下面是我代码的一部分: # -*- coding: utf-8 -*- import scrape_tools

我正在用cookies抓取一个网站。它们提供了多个下拉菜单,我正在遍历每个选项,并在每个请求中重新捕获会话cookie。代码在一段时间内运行正常,但我随机得到一个503错误

我的代码将数据插入到PostgreSQL数据库中,为了帮助强调此错误的随机性,我想与大家分享,在插入了1200个条目(行)和4200个条目之后,我收到了503。提出这个例外似乎并没有任何模式。我搞不懂

如果有帮助,下面是我代码的一部分:

# -*- coding: utf-8 -*-

import scrape_tools
import psycopg2
import psycopg2.extras
import urllib
import urllib2
import json
import cookielib
import time


tools = scrape_tools.tool_box()
db = tools.db_connect()
psycopg2.extras.register_hstore(db)
cursor = db.cursor(cursor_factory = psycopg2.extras.RealDictCursor)

cookiejar = cookielib.CookieJar()
opener = urllib2.build_opener(
    urllib2.HTTPRedirectHandler(),
    urllib2.HTTPHandler(debuglevel=0),
    urllib2.HTTPSHandler(debuglevel=0),
    urllib2.HTTPCookieProcessor(cookiejar),
)

url ='http://www.website.com/'
soup = tools.request(url)

type_select = soup('select',{'id':'type'})
for option_tag in type_select:
    select_option = option_tag('option')
    for option_contents in select_option:
        if 'Select' in option_contents.contents[0]:
            continue
        type = option_contents.contents[0]
        type_val = option_contents['value']
        print 'Type', type

        get_more_url = 'http://www.website.com/' + type_val
        request2 = urllib2.Request(get_more_url)
        fp2 = opener.open(request2)
        html2_object = fp2.read()
        json_result = json.loads(html2_object)

        for json_dict in json_result:
            for json_key in json_dict:
                if len(json_key) == 0:
                    continue
                more_data = json_dict[json_key]
                print '   ', more_data

               (---Out of courtesy, I'll stop here--)
(*请注意,
scrape_tools
是一个自定义模块)

我是不是缺少了一些饼干存储?我错过了什么明显的东西吗?我似乎不明白为什么会这样。我已经“谷歌”、“StackOverflow”等搜索了几个小时,试图找到有类似问题的人,但什么也没找到

我过去也曾使用selenium收集数据,并将其放在口袋中作为最后的手段,但这个项目非常庞大,我不希望Firefox在一周内耗尽服务器上的内存。

HTTP状态503,“服务不可用”,这意味着由于某种原因,服务器无法处理您的请求——但这通常是一个暂时的错误。如果您稍等一下,然后重试相同的请求,它可能会工作

您确实需要能够处理大规模刮削作业中的这种暂时性故障,因为互联网上充满了暂时性错误。连接一直失败或断开。不过,通常只需要一个简单的重试策略


不过,状态503可能特别意味着您请求页面的速度太快。如果页面抓取之间没有延迟,出于礼貌,您应该添加一个。

可能您获得503的原因是请求过多(但您肯定应该有一些异常处理)。在两个请求之间放置一个time.sleep是礼貌的,并且可以消除503。@Cheezey最后的迭代是在一个包含(通常)几十个目标页面的列表页面上进行的。我有一个
时间。在每个最终请求之前睡眠(2)
(注意
导入时间
)。我想我可以在每次迭代之间休眠,但我只请求一个包含json字符串的页面。如果做得太快,那会不会导致503?可能不会,但这只是一个建议。它可能不是导致503的原因(注意“可能”和“可能”)。