我在使用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的等价物)另外,我怎样才能防止这种情况发生呢?
答案 0 :(得分:2)
一件看起来不正确的事情
html_object = BeautifulSoup(file_pointer)
应该对来自urlopen
的数据进行操作,而不是对句柄进行操作: - 所以 - html_object = BeautifulSoup(file_pointer.read())
就是这里所需要的......
进行调试
安装requests如果你还没有 - 这是一个很棒的库,可用于这些事情。
然后:
import requests
for row in cursor:
page = requests.get('your url')
for hist in page.history:
print hist.status_code, hist.url
看看是否会抛出任何令人费解的事情......