js抓取网页内容(【知识点】化学实验基本知识,你了解多少?)
优采云 发布时间: 2022-01-30 14:09js抓取网页内容(【知识点】化学实验基本知识,你了解多少?)
1、有问题
同源政策
页面中的Javascript只能读取和访问同域的网页。这里需要注意的是,Javascript本身的域定义与其所在的网站无关,只有嵌入了Javascript代码的文档的域。比如下面的示例代码:
DOCTYPE HTML>
This is a webpage came from http://localhost:8000
123
console.log($('#test').text());
HTML文档来自:8000,表示其域为:8000(域和端口也有关系)。虽然页面中的jquery是从其中加载的,但是jquery的域只和它所在的html文档的域有关。这样就可以访问到html文档的属性,所以上面的代码就可以正常运行了。
PS 使用上述代码的原因是开发者将通用的Javascript库(如JQuery)地址指向公共相同的URL。用户加载一次 JS 后,后续加载会被浏览器缓存,从而加快页面加载速度。
从这个角度来看问题,如果提问者知道的远端指的是互联网上的任何一个页面,那么你所期望的功能就无法实现;如果远端指的是您可以控制 网站@ > 的提问者,请参阅下面的放宽同源策略;
放宽同源策略Document.domain:对于子域的情况。对于多个窗口(一个页面有多个iframe),通过将document.domain的值设置为同一个域,Javascript可以访问外部窗口;跨域资源共享:通过添加Access-Control-
Allow-Origin,此标头收录所有允许域的列表。受支持的浏览器将允许此页面上的 Javascript 访问这些域;
跨文档消息传递:该方法与域无关,不同文档的Javascript可以不受限制地相互收发消息,但不能主动读取和调用另一个文档的方法属性;
如果提问者控制了远程页面,您可以尝试第二种方法。
服务器端抓取
根据提问者的需要,比较可行的方案应该是在服务器端进行处理。有了(),可以在服务端使用Javascript语法进行DOM操作,也可以使用nodejs进行进一步分析等。当然,后续操作也可以使用Python、php、Java语言。
综上所述:
(1)服务器开启网页跨域限制;
(2)使用服务器请求页面