import urllib.request
url = "http://t.cn/Rq0PezN"
try:
response = urllib.request.urlopen(url)
source = response.geturl()
print(source)
except Exception as e:
request = urllib.request.urlopen(urllib.request.Request(url, headers = {'User-Agent':'Mozilla/8.0 (compatible; MSIE 8.0; Windows 7)'}))
print (request.url)
代碼如上 運行后報錯:urllib.error.HTTPError: HTTP Error 404: Not Found。
代碼是通過短連接獲取原鏈接,可以用瀏覽器打開這個鏈接但是卻提示狀態碼404的錯誤。不知道這個原理是啥,怎樣可以解決這個問題呢?
uj5u.com熱心網友回復:
這個鏈接是個下載鏈接,這個模塊是我們用來識別惡意下載鏈接的一個模塊。瀏覽器中可以進入下載,但是python獲取狀態碼就是404,為什么會這樣。uj5u.com熱心網友回復:
request = urllib.request.Request(url,headers=headers)request = urllib.request.urlopen(request)
url =request.geturl()
這么寫,盡量加個headers,里面把User-Agent寫上
uj5u.com熱心網友回復:
這個應該是302狀態碼的,但是也可能因為是沒加User-Agent吧uj5u.com熱心網友回復:
In [1]: import requests
In [2]: url = "http://t.cn/Rq0PezN"
In [3]: req = requests.get(url)
In [4]: print req.url
http://www.lkrfj.cn/%E7%9B%B8%E7%89%87.apk
uj5u.com熱心網友回復:
把瀏覽器里面的所有請求頭都帶上,然后在請求。uj5u.com熱心網友回復:
1.請求頭加上2.看看url地址自己拼接的是不是正確
uj5u.com熱心網友回復:
以后,所有請求都帶上請求頭,是個好習慣
uj5u.com熱心網友回復:
樓主,問題解決了嗎,遇到了同樣的問題。uj5u.com熱心網友回復:
看樣子是GG了uj5u.com熱心網友回復:
這tm鏈接,真的會玩uj5u.com熱心網友回復:
這種情況是服務器同時回傳200與404的狀態碼,抓包可以看到有404與200。瀏覽器訪問時,有200不會影響訪問,而爬蟲程式獲取該url的回執狀態碼404與200,遇到有404,則拋出了HTTP Error 404: Not Founduj5u.com熱心網友回復:
忘了告訴你解決辦法,你抓包將狀態碼200的cookie值貼到代碼的headers里,然后urlopen(req)過去就okuj5u.com熱心網友回復:
同樣遇到這個問題了,我是對app抓包獲得的url,瀏覽器上能打開,抓取顯示404(寫了header,報文里沒看到cookies),望有人能解答問題鏈接 https://ask.csdn.net/questions/702363
uj5u.com熱心網友回復:
你的python發出的HTTP請求和瀏覽器發出的請求是不一樣的,仔細看下哪些地方有差別uj5u.com熱心網友回復:
打開你要爬的網站 F12 選擇Network 重繪下頁面 選中下面的一條 然后找到User-Agent 將他的User-Agent 復制到你的header里 然后試試uj5u.com熱心網友回復:
沒錯我是這么寫的,但是還是一樣報404
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/107872.html
下一篇:python函式
