首頁 > 後端開發 > Python教學 > python爬蟲爬網頁時遇到網頁重新導向怎麼辦

python爬蟲爬網頁時遇到網頁重新導向怎麼辦

發布: 2019-07-08 09:12:03
原創
7868 人瀏覽過

python爬蟲爬網頁時遇到網頁重新導向怎麼辦

搜尋引擎爬蟲在爬取頁面時會遇到網頁被重定向的情況,所謂重定向(Redirect)就是透過各種方法(本文提到的為3種)將各種網路請求重新轉到其它位置(URL)。每個網站主頁是網站資源的入口,當重定向發生在網站主頁時,如果無法正確處理就很有可能會錯過這整個網站的內容。

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

#请求重定向
#方法一
response.setStatus(302);
response.setHeader("location", "/day06/index.jsp");
        
#方法二
response.sendRedirect("/day06/index.jsp");
登入後複製

scrapy shell 取得重定向頁面

scrapy shell -s ROBOTSTXT_OBEY=False --no-redirect " 
fetch(response.headers['Location'])
登入後複製

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

<html>
<head>  
  <meta http-equiv="refresh" content="0.1;url=http://www.redirectedtoxxx.com/"><!--本网页会在0.1秒内refresh为url所指的网页-->
</head>
</html>
登入後複製

解決方法是透過得到跳轉前的頁面原始碼,從中提取出重定向url資訊(上述程式碼第三行中的url屬性值)。一個具體的操作:

①使用xpath('//meta[@http-equiv="refresh" and @content]/@content')提取出content的值

②使用正規表示式提取出重定向的url值。

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

<script language=javascript>window.location.href=&#39;http://www.redirectedtoxxx.com&#39;</script>
登入後複製

網頁包含內容這種情況是最容易解決的,一般來講基本上是靜態網頁已經寫死的內容,或者動態網頁,採用模板渲染,瀏覽器獲取到HTML的時候已經是包含所有的關鍵訊息,所以直接在網頁上看到的內容都可以透過特定的HTML標籤得到javascript程式碼載入內容,這種情況是由於雖然網頁顯示時,內容在HTML標籤裡面,但其實是由於執行js程式碼加到標籤裡面的,所以這個時候內容在js程式碼裡面的,而js的執行是在瀏覽器端的操作,所以用程式去請求網頁位址的時候,得到的response是網頁程式碼和js的程式碼,所以自己在瀏覽器端能看到內容,解析時由於js未執行,肯定找到指定HTML標籤下內容肯定為空,這個時候的處理辦法,一般來講主要是要找到包含內容的js程式碼串,然後透過正規表示式獲得對應的內容,而不是解析HTML標籤。

更多Python相關技術文章,請造訪Python教學欄位學習!

以上是python爬蟲爬網頁時遇到網頁重新導向怎麼辦的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板