쿠키로 웹 사이트를 고치고 있습니다. 여러 드롭 다운 메뉴를 제공하며 각 옵션을 반복하고 모든 요청에 대해 세션 쿠키를 다시 캡처합니다. 코드는 잠시 동안 정상적으로 실행되지만 임의로 503 오류가 발생합니다.urllib 및 BeautifulSoup을 사용하는 임의의 HTTP 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
는 사용자 정의 모듈)
내가 쿠키의 저장 뭔가를 놓치고 있습니까? 나는 명백한 것을 놓치고 있는가? 왜 이런 일이 일어나는지 알 수는 없습니다. 나는 '봤 거든', 'stackoverflowed'등 비슷한 문제가있는 누군가를 찾으려고 노력했지만 아무 것도 발견하지 못했다.
나는 셀레늄을 사용하여 과거에 데이터를 긁어 모으기도했지만 내 주머니에서 최후의 수단으로 사용했습니다.하지만이 프로젝트는 엄청 나서 Firefox는 서버에서 메모리를 1 주일 이상 먹지 않을 것입니다.
아마 503을 얻는 이유는 과도한 요청입니다. (하지만 예외 처리를해야합니다.) 그것은 정중 할 것이고 503을 없애고 요청을 기다릴 수 있습니다. – Cheezey
@Cheezey 마지막 반복은 (대개) 수십 개의 대상 페이지가 포함 된 목록 페이지에 대한 것입니다. 나는 각 마지막 요청 전에'time.sleep (2)'을 가지고있다. ('import time'을 주목하라.) 나는 각 반복 사이에 잠을 잘 수 있다고 생각하지만, 나는 단지 json 문자열을 포함하는 페이지를 요청할 뿐이다. 너무 빨리 끝나면 503이 나올까요? – That1Guy
아마도 그렇지는 않지만 단지 제안 일뿐입니다. 아마도 503을 일으키지 않았을 것입니다 ('아마도'와 '할 수 있음'에 유의하십시오). – Cheezey