小屋創作

日誌2020-06-08 15:44

URL Redirection

作者:Yotsuba

Redirection,一般來說我們叫他重導向

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

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




延續上次的 PTT Beauty 板圖片爬蟲 (上)PTT Beauty 板圖片爬蟲 (下)

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

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

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


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

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

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

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


http://pythonscraping.com/pages/javascript/redirectDemo1.html

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

http://pythonscraping.com/pages/javascript/redirectDemo2.html

這就是透過 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 帶我跳轉到別的網頁,就會導致我和爬蟲看到的不一樣

但這些完全取決於你在意的「資料」在什麼位置

4

0

LINE 分享

相關創作

【出遊記趣】新北八里 左岸觀海大道

新入手三星 galaxy s8 active來玩遊戲w

04/28 認識新朋友

留言

開啟 APP

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

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