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