前端js 爬取 獲取網頁

一、存在問題javascript

same origin policy(同源策略)

頁面中的Javascript只能讀取,訪問同域的網頁。這裏須要注意的是,Javascript自身的域定義和它所在的網站沒有任何關係,只和該Javascript代碼所嵌入的文檔的域有關。如如下示例代碼:php

<!DOCTYPE HTML>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>This is a webpage came from http://localhost:8000</title>
  <script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
</head>
<body>
  <div id="test">123</div>
  <script type="text/javascript"> console.log($('#test').text()); </script>
</body>
</html>

該HTML文檔來源於http://localhost:8000,這意味着它的域爲http://localhost:8000(域和端口也相關),雖然頁面中的jquery加載自ajax.googleapis.com,然而該JQuery的域只和它所處的HTML文檔的域有關,從而能夠訪問該HTML文檔的屬性,於是以上代碼能夠正常運行。
附:使用上述代碼的緣由是,開發者將通用的Javascript庫(如JQuery)地址指向公共相同的URL。當用戶加載過一次該JS後,之後的加載將都經過瀏覽器緩存,從而加快了頁面加載速度。html

從這個角度看問題,假如提問者所知的遠端指的是互聯網上任意的頁面,那麼不能實現你所指望的功能;若是遠端指的是提問者你所擁有控制權的網站,請看下面的Relaxing the same-origin policy;java

Relaxing the same-origin policy

  1. Document.domain:用於子域名的狀況。對於多個windows(一個頁面有多個iframe),經過設置document.domain的值爲相同的域,使得Javascript能夠訪問異域window;
  2. Cross-origin resource sharing:經過在服務器端返回頭增長Access-Control-

Allow-Origin,該頭部包含了全部容許訪問的域的列表。支持的瀏覽器將容許本頁面Javascript訪問這些域;node

  1. cross-document messaging:該方式和域無關,不一樣文檔的Javascript能夠相互發送接受消息而不受限制,然而不能主動趣讀取,調用另外一個文檔的方法屬性;

若是提問者擁有遠端頁面的控制權,能夠嘗試第二種方法。jquery

服務器端抓取

根據提問者的需求,比較可行的方案應該是在服務器端進行處理。藉助(http://phantomjs.org/),你可使用Javascript語法在服務器端進行DOM操做,同時你可使用nodejs進行進一步的分析等,固然,你也可使用Python, php ,Java語言進行後續操做。web

 

 

結論:ajax

(1)服務端將網頁的跨域限制打開;windows

(2)使用服務度端請求頁面api

相關文章
相關標籤/搜索