創作內容

4 GP

URL Redirection

作者:Yotsuba│2020-06-08 15:44:51│巴幣:8│人氣:411
Redirection,一般來說我們叫他重導向

很多人可能會有一個疑問「為什麼我看到的跟爬蟲看到的不一樣 ?」

網頁重導向只是其中一個可能性





大家可以看到目標網頁的 Status Code 是 302,302 就是暫時重導向的意思

試想我們點擊「我同意」的時候發生什麼事 ? 就直接跳轉到目標網頁了

所以重導向不是一個很難的概念,單純就是因為某事件觸發,導致網頁跳轉


根據我的理解,302 這種重導向做到的方法是透過 Web Server 或 PHP Code 做到的

而有另一種重導向是透過 JavaScript 做到的,透過腳本做到的就不會出現 302 而是 200

差別在於第一種是重導向,第二種是直接去請求另一個網站,但功能上都是網頁跳轉

詳細可以參考一下 wiki 的解說



這邊有一個網頁,當你點擊開來過 2 秒就會跳轉到以下網頁


這就是透過 JavaScript 做到的

如果你想要查看他的原始碼,那你得在 2 秒內按下 Ctrl + U,應該是綽綽有餘啦 !


import requests
from bs4 import BeautifulSoup


# I am over 18 years old
session  = requests.Session()
response = session.post('https://www.ptt.cc/ask/over18', data = {'from' : '/bbs/Beauty/M.1563888394.A.F76.html', 'yes' : 'yes'})
soup     = BeautifulSoup(response.text, 'html.parser')


# Get images
div_list = soup.find_all('div', class_ = 'richcontent')
for div in div_list:
    print(div.img.get('src'))


這邊有一段 Code,跟之前 PTT Beauty 板圖片爬蟲 (下) 的幾乎一模一樣

我就不附上執行結果了,因為執行結果也一模一樣

差別在於它通過 Cookie 驗證後,沒有重新去請求目標網頁

因為網頁自動重導向了 !

沒錯,requests 真的是很強大的函式庫,它會自動處理重導向

如果你想要關閉重導向也是可以的,可以寫 allow_redirects = False


相較之下,如果是 JavaScript 的重導向,你用 requests 請求後就只會看到第一個網頁

因為原生的 Python 沒有能力執行 JavaScript,所以如果你想要爬的是重導向過後的網頁

那你應該直接用 requests 去請求跳轉後的那份網頁

注意 ! 原生的 Python 沒有能力執行 JavaScript,卻有一些第三方函式庫可以做到

可以搜尋看看 Python execute JavaScript 之類的關鍵字


總之重導向是一個網頁本來就會遇到的議題,所以爬蟲也有義務知道一下

至於網頁回應 302 的時候要不要調整 allow_redirects 屬性 ?

如果是 JavaScript 帶我跳轉到別的網頁,就會導致我和爬蟲看到的不一樣

但這些完全取決於你在意的「資料」在什麼位置
引用網址:https://home.gamer.com.tw/TrackBack.php?sn=4810023
All rights reserved. 版權所有,保留一切權利

相關創作

留言共 0 篇留言

我要留言提醒:您尚未登入,請先登入再留言

4喜歡★happy819tw 可決定是否刪除您的留言,請勿發表違反站規文字。

前一篇:Hashing vs E... 後一篇:用 Postman 窺探...

追蹤私訊切換新版閱覽

作品資料夾

leon770530巴友
我的小屋首頁共有4篇健身相關證照心得文,對健身有興趣的朋友可以來看看喔!看更多我要大聲說13小時前


face基於日前微軟官方表示 Internet Explorer 不再支援新的網路標準,可能無法使用新的應用程式來呈現網站內容,在瀏覽器支援度及網站安全性的雙重考量下,為了讓巴友們有更好的使用體驗,巴哈姆特即將於 2019年9月2日 停止支援 Internet Explorer 瀏覽器的頁面呈現和功能。
屆時建議您使用下述瀏覽器來瀏覽巴哈姆特:
。Google Chrome(推薦)
。Mozilla Firefox
。Microsoft Edge(Windows10以上的作業系統版本才可使用)

face我們了解您不想看到廣告的心情⋯ 若您願意支持巴哈姆特永續經營,請將 gamer.com.tw 加入廣告阻擋工具的白名單中,謝謝 !【教學】