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

如果状态代码不等于 200,if 语句应该阻止执行任何进一步的代码,但是我在本节之后的代码中出现索引错误,并且在调查提供错误的 url 之后,我发现它重定向而没有给我状态码:302。

关于为什么我会在重定向时收到 200 状态代码响应的任何想法?(我也尝试过 urllib2 和 httplib 的等价物)另外,我怎样才能防止这种情况发生?

4

1 回答 1

2

一件事看起来不对

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 回答