這篇文章將為大家詳細(xì)講解有關(guān)如何解決python爬蟲(chóng)爬網(wǎng)頁(yè)時(shí)遇到網(wǎng)頁(yè)重定向的問(wèn)題,小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。
荊州網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián),荊州網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為荊州上千家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\成都外貿(mào)網(wǎng)站建設(shè)要多少錢(qián),請(qǐng)找那個(gè)售后服務(wù)好的荊州做網(wǎng)站的公司定做!搜索引擎爬蟲(chóng)在爬取頁(yè)面時(shí)會(huì)遇到網(wǎng)頁(yè)被重定向的情況,所謂重定向(Redirect)就是通過(guò)各種方法(本文提到的為3種)將各種網(wǎng)絡(luò)請(qǐng)求重新轉(zhuǎn)到其它位置(URL)。每個(gè)網(wǎng)站主頁(yè)是網(wǎng)站資源的入口,當(dāng)重定向發(fā)生在網(wǎng)站主頁(yè)時(shí),如果不能正確處理就很有可能會(huì)錯(cuò)失這整個(gè)網(wǎng)站的內(nèi)容。
1、服務(wù)器端重定向,在服務(wù)器端完成,一般來(lái)說(shuō)爬蟲(chóng)可以自適應(yīng),是不需要特別處理的,如響應(yīng)代碼301(永久重定向)、302(暫時(shí)重定向)等。具體來(lái)說(shuō),可以通過(guò)requests請(qǐng)求得到的response對(duì)象中的url、status_code兩個(gè)屬性來(lái)判斷。當(dāng)status_code為301、302或其他代表重定向的代碼時(shí),表示原請(qǐng)求被重定向;當(dāng)response對(duì)象的url屬性與發(fā)送請(qǐng)求時(shí)的鏈接不一致時(shí),也說(shuō)明了原請(qǐng)求被重定向且已經(jīng)自動(dòng)處理。
#請(qǐng)求重定向 #方法一 response.setStatus(302); response.setHeader("location", "/day06/index.jsp"); #方法二 response.sendRedirect("/day06/index.jsp");
scrapy shell 獲取重定向頁(yè)面
scrapy shell -s ROBOTSTXT_OBEY=False --no-redirect " fetch(response.headers['Location'])
2、meta refresh,即網(wǎng)頁(yè)中的<meta>標(biāo)簽聲明了網(wǎng)頁(yè)重定向的鏈接,這種重定向由瀏覽器完成,需要編寫(xiě)代碼進(jìn)行處理。例如,某一重定向如下面的html代碼第三行中的注釋所示,瀏覽器能夠自動(dòng)跳轉(zhuǎn),但爬蟲(chóng)只能得到跳轉(zhuǎn)前的頁(yè)面,不能自動(dòng)跳轉(zhuǎn)。
<html> <head> <meta http-equiv="refresh" content="0.1;url=http://www.redirectedtoxxx.com/"><!--本網(wǎng)頁(yè)會(huì)在0.1秒內(nèi)refresh為url所指的網(wǎng)頁(yè)--> </head> </html>
解決辦法是通過(guò)得到跳轉(zhuǎn)前的頁(yè)面源碼,從中提取出重定向url信息(上述代碼第三行中的url屬性值)。一個(gè)具體的操作:
①使用xpath('//meta[@http-equiv="refresh" and @content]/@content')提取出content的值
②使用正則表達(dá)式提取出重定向的url值。
3、js 重定向,通過(guò)JavaScript代碼形式進(jìn)行重定向。如下面JavaScript代碼
<script language=javascript>window.location.href='http://www.redirectedtoxxx.com'</script>
網(wǎng)頁(yè)包含內(nèi)容這種情況是最容易解決的,一般來(lái)講基本上是靜態(tài)網(wǎng)頁(yè)已經(jīng)寫(xiě)死的內(nèi)容,或者動(dòng)態(tài)網(wǎng)頁(yè),采用模板渲染,瀏覽器獲取到HTML的時(shí)候已經(jīng)是包含所有的關(guān)鍵信息,所以直接在網(wǎng)頁(yè)上看到的內(nèi)容都可以通過(guò)特定的HTML標(biāo)簽得到j(luò)avascript代碼加載內(nèi)容,這種情況是由于雖然網(wǎng)頁(yè)顯示時(shí),內(nèi)容在HTML標(biāo)簽里面,但是其實(shí)是由于執(zhí)行js代碼加到標(biāo)簽里面的,所以這個(gè)時(shí)候內(nèi)容在js代碼里面的,而js的執(zhí)行是在瀏覽器端的操作,所以用程序去請(qǐng)求網(wǎng)頁(yè)地址的時(shí)候,得到的response是網(wǎng)頁(yè)代碼和js的代碼,所以自己在瀏覽器端能看到內(nèi)容,解析時(shí)由于js未執(zhí)行,肯定找到指定HTML標(biāo)簽下內(nèi)容肯定為空,這個(gè)時(shí)候的處理辦法,一般來(lái)講主要是要找到包含內(nèi)容的js代碼串,然后通過(guò)正則表達(dá)式獲得相應(yīng)的內(nèi)容,而不是解析HTML標(biāo)簽。
關(guān)于如何解決python爬蟲(chóng)爬網(wǎng)頁(yè)時(shí)遇到網(wǎng)頁(yè)重定向的問(wèn)題就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到。
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專(zhuān)為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。
網(wǎng)站題目:如何解決python爬蟲(chóng)爬網(wǎng)頁(yè)時(shí)遇到網(wǎng)頁(yè)重定向的問(wèn)題-創(chuàng)新互聯(lián)
本文來(lái)源:http://jinyejixie.com/article40/dsiseo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)頁(yè)設(shè)計(jì)公司、網(wǎng)站收錄、響應(yīng)式網(wǎng)站、服務(wù)器托管、動(dòng)態(tài)網(wǎng)站、自適應(yīng)網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容