我在用cookies抓取網站。他們提供了多個下拉菜單,我正在遍歷每個選項,並重新捕獲每個請求的會話cookie。代碼運行得很好,但我隨機得到了一個503錯誤。隨機HTTP 503錯誤使用urllib和BeautifulSoup
我的代碼將數據插入到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在服務器上佔用一個星期的內存。
也許你得到503的原因是過多的請求(但你絕對應該有一些異常處理)。這將是有禮貌的,並可以消除503的時間睡眠在請求之間。 – Cheezey
@Cheezey最後一次迭代遍佈包含(通常)數十個目標頁面的列表頁面。我在每次最終請求之前都有'time.sleep(2)'(注意''import time'')。我想我可以在每次迭代之間入睡,但我只是請求一個包含json字符串的頁面。如果做得太快,甚至會導致503? – That1Guy
可能不是,但它只是一個建議。它可能不會導致503(注意「可能」和「可能」)。 – Cheezey