1

Python で特定のリダイレクトを処理できません。どうやら読み込まれてすぐに ww1.www.com にリダイレクトされるページをリクエストしています。ヘッダー/ステータス コードを返すことを知っているすべての方法を試し、常に適切な結果 (ステータス コード: 200、適切なホスト/リファラー パラメータなど) になるため、これが当てはまると思います。

ここに私が持っているものがあります:

from BeautifulSoup import BeautifulSoup
import urllib
import psycopg2
import psycopg2.extras

db = psycopg2.connect(
                     host = 'myIP'
                     database = 'myDATABASE'
                     user = 'myUSERNAME'
                     password = 'myPASSWORD'
                     )

cursor = db.cursor(cursor_factory = psycopg2.extras.RealDictCursor)
cursor.execute("SELECT info FROM table")

for row in cursor:
    url = 'http://www.website.com/' + row['info']
    file_pointer = urllib.urlopen(url)
    html_object = BeautifulSoup(file_pointer)

    if file_pointer.getcode() != 200:
        continue

if ステートメントは、ステータス コードが 200 に等しくない場合、それ以上コードが実行されないようにする必要がありますが、このセクションの後のコードでインデックス エラーが発生し、エラーを提供する URL を調査した後、エラーを表示せずにリダイレクトすることがわかりました。ステータス コード: 302。

リダイレクト中に 200 ステータス コード応答が返される理由について何か考えはありますか? (urllib2 と httplib で同等のものも試しました) また、どうすればこれを防ぐことができますか?

4

1 に答える 1

2

正しくないように見える 1 つのこと

html_object = BeautifulSoup(file_pointer)ハンドルではなくからのデータを操作する必要がありますurlopen:- そう -html_object = BeautifulSoup(file_pointer.read())ここで必要なのは...

デバッグ用

まだリクエストをインストールしていない場合は、インストールしてください。このような用途に使用するのに最適なライブラリです。

それで:

import requests
for row in cursor:
    page = requests.get('your url')
    for hist in page.history:
        print hist.status_code, hist.url

そして、それが不可解なものを捨てるかどうかを確認してください...

于 2012-12-14T18:58:30.183 に答える