摘要:如何利用網(wǎng)頁請求暴露出來的接口去抓取網(wǎng)頁數(shù)據(jù)很多爬蟲都能實現(xiàn)這個功能。跨域通信時,瀏覽器會報如下錯誤其實這兩個問題都是由于跨域造成的。結(jié)果這些數(shù)據(jù)可以在請求成功會傳回本地。
如何利用網(wǎng)頁ajax請求暴露出來的接口去抓取網(wǎng)頁數(shù)據(jù)?很多爬蟲都能實現(xiàn)這個功能。不過今天要來和大家八一八單從前端的角度,利用js解決這個問題。
大家都知道,在不同域的情況下是不能發(fā)送ajax請求的,瀏覽器會報如下錯誤:
同時,內(nèi)嵌的iframe中無法進行跨域通信的,也就是說不同域的iframe是無法互相讀取數(shù)據(jù)的(當然利用hash變化可以從父window傳入數(shù)據(jù)到子iframe,不過并沒有什么意義)。iframe跨域通信時,瀏覽器會報如下錯誤:
其實這兩個問題都是由于跨域造成的。
下面就介紹如何解決這個問題。
其實問題的關(guān)鍵就在于,瀏覽器在解析ajax請求地址時會和當前網(wǎng)頁的地址進行比較,如果是跨域的,那就禁止掉并且報錯。那么我們?nèi)绻尀g覽器解析出的ajax地址和當前網(wǎng)頁的解析地址一樣,瀏覽器不就不會禁止我們的請求了么。
那么瀏覽器是如何解析url的呢?
首先當瀏覽器訪問一個域名時,會查詢本地的DNS緩存中是否有關(guān)于這個網(wǎng)址對應(yīng)ip地址,如果有的話,直接從本地取得ip地址然后訪問,如果沒有,瀏覽器就會向DNS服務(wù)器發(fā)出DNS請求獲得該域名對應(yīng)的ip地址然后存入本地緩存然后訪問。
那么介于以上問題,我們只要在本地偽造一條域名的解析方式,然后再通過偽造的域和目標域進行跨域請求不就可以了么。
windows下的打開C:WindowsSystem32driversetc
這個文件夾下有一個hosts文件,如果改過hosts來上谷歌的同學對這個應(yīng)該很熟悉,在hosts文件里加上這樣一段代碼:
127.0.0.1 a.目標網(wǎng)址.com
這樣你的訪問a.目標網(wǎng)址.com就和訪問localhost一樣了,這樣做的目的是方便搭起本地的服務(wù)時,本地的服務(wù)和目標的域名之間就不會存在跨域問題了,這樣就能在本地,通過在目標網(wǎng)頁植入iframe標簽的方式,向目標域發(fā)起跨域請求,取得目標域的數(shù)據(jù)。
直接上代碼(用了jQuery)腳本代碼,直接插在父域
var mySrc = "http://a.目標網(wǎng)址.com:9000/myIframe.html"; document.domain = "目標網(wǎng)址.com"; //關(guān)鍵代碼,將域提升到根域 $("body").append("
iframe中html代碼
Document
注意:
只有將iframe提升到根域,這樣才能與父window通信,耳document.domain指令只能提升當前域到當前的根域,這也是必須要修改本地hosts文件的原因,這是解決跨域問題的根本。
在抓取目標網(wǎng)頁數(shù)據(jù)之前,要先看目標網(wǎng)頁發(fā)送ajax請求的方式,得到請求的api,通過目標網(wǎng)頁的控制臺插入腳本,然后運行,得到要得到的數(shù)據(jù),在通過和本地請求的方式,發(fā)送到本地。
下面是抓取某物流查詢網(wǎng)頁中物流信息的過程:
結(jié)果涂掉的為目標網(wǎng)址;這是向目標網(wǎng)頁插入我的腳本,成功后網(wǎng)頁中就會被插入了一個地址為本地的,但是域名和目標域相同的iframe。
這些數(shù)據(jù)可以在請求成功會傳回本地。
最后,其實博主也是初識前端,還處在學習和探索當中,希望能與大家一起學習進步,歡迎大家指出文章中的錯誤和不足,一定虛心接受!
btw,首篇博文,希望大家多多支持!!!
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/91593.html
摘要:跨域原因同源策略在客戶端編程語言中,如和,同源策略是一個很重要的安全理念,它在保證數(shù)據(jù)的安全性方面有著重要的意義。同源策略規(guī)定跨域之間的腳本是隔離的,一個域的腳本不能訪問和操作另外一個域的絕大部分屬性和方法。由兩部分組成回調(diào)函數(shù)和數(shù)據(jù)。 1.JavaScript跨域原因--同源策略 在客戶端編程語言中,如javascript和 ActionScript,同源策略是一個很重要的安全理...
摘要:同源策略所謂同源是指協(xié)議,域名,端口均相同。同源策略是瀏覽器的一個安全功能,不同源的客戶端腳本在沒有明確授權(quán)的情況下,不能讀寫對方資源。需注意的是由于同源策略的限制,所讀取的為跨域請求接口所在域的,而非當前頁。 一、什么是跨域 1.URL解析 URL (Uniform Resource Locator )統(tǒng)一資源定位符(URL)是用于完整地描述Internet上網(wǎng)頁和其他資源的地址的...
摘要:為請求指定一個回調(diào)函數(shù)名。這主要用來讓生成一個獨特的函數(shù)名,這樣管理請求更容易,也能方便地提供回調(diào)函數(shù)和錯誤處理。在回調(diào)函數(shù)中,通常我們只需通過判斷請求是否完成,如果已完成,再根據(jù)判斷是否是一個成功的響應(yīng)。 本篇文章借鑒自 博客園文章 原文地址 AJAX即Asynchronous Javascript And XML(異步JavaScript和XML),是指一種創(chuàng)建交互式網(wǎng)頁應(yīng)用的...
閱讀 1095·2021-11-15 18:00
閱讀 2808·2021-09-22 15:18
閱讀 1970·2021-09-04 16:45
閱讀 753·2019-08-30 15:55
閱讀 3865·2019-08-30 13:10
閱讀 1340·2019-08-30 11:06
閱讀 1988·2019-08-29 12:51
閱讀 2296·2019-08-26 13:55