1. 程式人生 > >爬蟲解決網頁重定向問題

爬蟲解決網頁重定向問題

爬蟲解決網頁重定向問題

https://blog.csdn.net/ingiaohi/article/details/72672169

 

1.伺服器端重定向,在伺服器端完成,一般來說爬蟲可以自適應,是不需要特別處理的,如響應程式碼301(永久重定向)、302(暫時重定向)等。具體來說,可以通過requests請求得到的response物件中的url、status_code兩個屬性來判斷。當status_code為301、302或其他代表重定向的程式碼時,表示原請求被重定向;當response物件的url屬性與傳送請求時的連結不一致時,也說明了原請求被重定向且已經自動處理。

 

2.meta refresh,即網頁中的<meta>標籤聲明瞭網頁重定向的連結,這種重定向由瀏覽器完成,需要編寫程式碼進行處理。例如,某一重定向如下面的html程式碼第三行中的註釋所示,瀏覽器能夠自動跳轉,但爬蟲只能得到跳轉前的頁面,不能自動跳轉。

[html]  view plain  copy      
  1. <html>  
  2. <head>  
  3. <meta http-equiv="refresh" content="0.1;url=http://www.redirectedtoxxx.com/"><!--本網頁會在0.1秒內refresh為url所指的網頁-->  
  4. </head>  
  5. </html>  

解決辦法是通過得到跳轉前的頁面原始碼,從中提取出重定向url資訊(上述程式碼第三行中的url屬性值)。一個具體的操作:①使用xpath('//meta[@http-equiv="refresh" and @content]/@content')提取出content的值 ②使用正則表示式提取出重定向的url值。

 

 

3.js 重定向,通過JavaScript程式碼形式進行重定向。如下面JavaScript程式碼

[html]  view plain  copy      
  1. <script language=javascript>window.location.href='http://www.redirectedtoxxx.com'</script>  

對於這種方式的跳轉,由於可以實現該功能的JavaScript語句有多種形式,不能再使用正則表示式提取url,只能考慮載入JavaScript程式碼來進行解決。

https://blog.csdn.net/ingiaohi/article/details/72672169

 

1.伺服器端重定向,在伺服器端完成,一般來說爬蟲可以自適應,是不需要特別處理的,如響應程式碼301(永久重定向)、302(暫時重定向)等。具體來說,可以通過requests請求得到的response物件中的url、status_code兩個屬性來判斷。當status_code為301、302或其他代表重定向的程式碼時,表示原請求被重定向;當response物件的url屬性與傳送請求時的連結不一致時,也說明了原請求被重定向且已經自動處理。

 

2.meta refresh,即網頁中的<meta>標籤聲明瞭網頁重定向的連結,這種重定向由瀏覽器完成,需要編寫程式碼進行處理。例如,某一重定向如下面的html程式碼第三行中的註釋所示,瀏覽器能夠自動跳轉,但爬蟲只能得到跳轉前的頁面,不能自動跳轉。

[html]  view plain  copy      
  1. <html>  
  2. <head>  
  3. <meta http-equiv="refresh" content="0.1;url=http://www.redirectedtoxxx.com/"><!--本網頁會在0.1秒內refresh為url所指的網頁-->  
  4. </head>  
  5. </html>  

解決辦法是通過得到跳轉前的頁面原始碼,從中提取出重定向url資訊(上述程式碼第三行中的url屬性值)。一個具體的操作:①使用xpath('//meta[@http-equiv="refresh" and @content]/@content')提取出content的值 ②使用正則表示式提取出重定向的url值。

 

 

3.js 重定向,通過JavaScript程式碼形式進行重定向。如下面JavaScript程式碼

[html]  view plain  copy      
  1. <script language=javascript>window.location.href='http://www.redirectedtoxxx.com'</script>  

對於這種方式的跳轉,由於可以實現該功能的JavaScript語句有多種形式,不能再使用正則表示式提取url,只能考慮載入JavaScript程式碼來進行解決。