Tha*_*Guy 3 python urllib urllib2 beautifulsoup web-scraping
我正在用 cookie 抓取网站。它们提供了多个下拉菜单,我遍历每个选项并重新捕获每个请求的会话 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--)
Run Code Online (Sandbox Code Playgroud)
(*请注意,scrape_tools
是自定义模块)
我错过了 cookie 存储的东西吗?我错过了一些明显的东西吗?我似乎无法弄清楚为什么会发生这种情况。我已经“谷歌搜索”、“stackoverflowed”等几个小时试图找到有类似问题的人,但没有找到任何东西。
过去我也使用 selenium 来抓取数据,并将其放在我的口袋里作为最后的手段,但这个项目是巨大的,我不想让 Firefox 占用服务器上的内存一周。
HTTP 状态 503,“服务不可用”,意味着由于某种原因服务器无法处理您的请求——但这通常是一个暂时性错误。如果您稍等片刻并重试相同的请求,它可能会起作用。
您确实需要能够处理大规模抓取作业中的这种瞬时故障,因为 Internet 充满了瞬时错误。连接失败或一直断开。不过,通常只需要一个简单的重试策略即可。
但是,状态 503 可能特别意味着您请求页面的速度太快。如果您在页面提取之间没有延迟,那么出于礼貌起见,您应该添加一个。
归档时间: |
|
查看次数: |
3824 次 |
最近记录: |