簡體   English   中英

使用 python requests 庫或其他方式查找重定向的 URL

[英]Find the redirected URL with python requests library or otherwise

這個網址:

http://www.yellowpages.com.sg/newiyp/UrlRedirect?applicationInd=yp&searchType=68&searchCriteria=multiple+choices&accessType=8&advertiserName=Multiple+Choices&url=62CE8F02A1BE04A51C81F85D1CE8B54DFC608A9CDA925C15EED5DA6DD90E3F7DC99CFF77216D1D1083877BA841EB97C3

重定向至: http : //www.callmyname.sg/view/Multiple+Choices/Uk9JRC9TRzA0SkstQkJDNkRFNTEuMTNCNS9FRDY5LUE4NzgtRUY=

使用requests ,我得到:

import requests

url = "http://www.yellowpages.com.sg/newiyp/UrlRedirect?applicationInd=yp&searchType=68&searchCriteria=multiple+choices&accessType=8&advertiserName=Multiple+Choices&url=62CE8F02A1BE04A51C81F85D1CE8B54DFC608A9CDA925C15EED5DA6DD90E3F7DC99CFF77216D1D1083877BA841EB97C3"
response = requests.get(url)
response.url

它返回相同的第一個 URL,而不是重定向的 URL。

這里是示例。 我使用 bit.ly 是因為我使用你的 url 得到了 403。

>>> url = "http://bit.ly/18SuUzJ"
>>> r = requests.get(url, allow_redirects=False)
>>> r.status_code
301
>>> r.headers['Location']
'http://stackoverflow.com/'

根據請求文檔, r.history是您所需要的。

該站點似乎需要會話 cookie 才能使重定向工作。

r.url實際上會在重定向后顯示 URL( 除非您更改了配置)。

您重定向的問題在於,如果 cookie 不存在,則它永遠不會發生。 您可以通過在隱身/私密模式下使用瀏覽器訪問 URL 來測試。 您將看到來自http://www.yellowpages.com.sg/的錯誤消息,狀態代碼為 200。重新加載時,您將被重定向。

奇怪的是,即使使用requests會話,我也無法獲得重定向。 使用真實瀏覽器的用戶代理字符串似乎也無濟於事。 您可能需要詳細比較這兩個請求才能找到關鍵的區別。

我試過的代碼是這樣的:

import requests
headers = {'User-Agent': 'user_agent',}
s = requests.Session()
url = "http://www.yellowpages.com.sg/"
r = s.get(url, headers=headers)
url = "http://www.yellowpages.com.sg/newiyp/UrlRedirect?applicationInd=yp&searchType=68&searchCriteria=multiple+choices&accessType=8&advertiserName=Multiple+Choices&url=62CE8F02A1BE04A51C81F85D1CE8B54DFC608A9CDA925C15EED5DA6DD90E3F7DC99CFF77216D1D1083877BA841EB97C3"
r = s.get(url, headers=headers)
r.url

HEAD請求可能比GET請求更快。 即使不遵循GET重定向也是如此。 這是因為HEAD只返回標題,而不是內容,而GET返回兩者。

import requests

>>> response = requests.head('https://bit' + '.ly/pyre', allow_redirects=False)

>>> response.is_redirect
True

>>> response.headers['Location']
'http://www.python.org/doc/current/library/re.html'

上述方法應准確識別一級重定向。 同樣為了簡單起見,我使用requests.head而不是requests.Session().head

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM