Tôi có tập lệnh python sau và nó hoạt động rất đẹp.Python làm theo các chuyển hướng và sau đó tải xuống trang?
import urllib2
url = 'http://abc.com' # write the url here
usock = urllib2.urlopen(url)
data = usock.read()
usock.close()
print data
tuy nhiên, một số URL tôi cung cấp có thể chuyển hướng nó 2 lần trở lên. Làm thế nào tôi có thể có python chờ cho chuyển hướng để hoàn thành trước khi tải dữ liệu. Ví dụ khi sử dụng đoạn mã trên với
http://www.google.com/search?hl=en&q=KEYWORD&btnI=1
là equvilant của nhấn nút im may mắn trên tìm kiếm google, tôi nhận được:
>>> url = 'http://www.google.com/search?hl=en&q=KEYWORD&btnI=1'
>>> usick = urllib2.urlopen(url)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 126, in urlopen
return _opener.open(url, data, timeout)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 400, in open
response = meth(req, response)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 513, in http_response
'http', request, response, code, msg, hdrs)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 438, in error
return self._call_chain(*args)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 372, in _call_chain
result = func(*args)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 521, in http_error_default
raise HTTPError(req.get_full_url(), code, msg, hdrs, fp)
urllib2.HTTPError: HTTP Error 403: Forbidden
>>>
Ive thử (url, dữ liệu, thời gian chờ) tuy nhiên, tôi không chắc chắn nên đặt gì ở đó.
EDIT: Tôi thực sự phát hiện ra nếu tôi không chuyển hướng và chỉ được sử dụng các tiêu đề của liên kết đầu tiên, tôi có thể lấy vị trí của chuyển hướng tới và sử dụng đó là liên kết cuối cùng của tôi
là bạn quen với 'HTTPRedirectHandler' – RanRag
Tôi thì không. Chỉ cần googled nó. Tôi có thể thấy cách làm cho nó KHÔNG tuân theo. Tuy nhiên, tôi không thể bắt buộc phải theo dõi – Cripto
Tôi biết đã lâu rồi, nhưng bạn có thể đào sâu trong hầm nhớ và cho tôi biết cách bạn giải quyết vấn đề này không? cảm ơn! – tmthyjames