Cookie を使用して Web サイトをスクレイピングしています。それらは複数のドロップダウン メニューを提供し、私は各オプションを反復処理し、リクエストごとにセッション Cookie を再取得しています。コードはしばらくは正常に実行されますが、ランダムに 503 エラーが発生します。
私のコードは PostgreSQL データベースにデータを挿入します。このエラーのランダム性を強調するために、1,200 エントリ (行) と 4,200 エントリ (行) を挿入した後に 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
(*カスタムモジュールであることに注意してください)
Cookie ストレージで何か不足していますか? 明らかな何かが欠けていますか?なぜこれが起こっているのか理解できないようです。同様の問題を抱えている人を何時間も探して「グーグル」、「スタックオーバーフロー」などしましたが、何も見つかりませんでした。
また、過去にセレンを使用してデータをスクレイピングし、最後の手段としてそれをポケットに入れましたが、このプロジェクトは巨大であり、Firefox がサーバーのメモリを 1 週間消費するのは避けたいと思います。