javascript - 对网站的 Http 请求以获取特定 html 元素的内容
问题描述
我正在建立一个网站来帮助学生安排他们的大学课程。它将包括诸如日期、时间、教授等内容。我想从 www.ratemyprofessors.com 获取教授的“评级”并将其显示在我的网站上。例如,在https://www.ratemyprofessors.com/ShowRatings.jsp?tid=1230754 ,您可以看到 Michael 的评分为 4.6。我想请求该数据并将其显示在网站上。当他们的收视率发生变化时,我无法事先刮掉它,我希望它显示他们当前的收视率。我可以用 XmlHttpRequest 做到这一点吗?我该怎么做?我希望在 JavaScript 中做到这一点。
解决方案
除非目标站点允许,否则浏览器不会让对第三方网站的 http 请求离开您的网页。这称为 CORS。请参阅https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS。如果该站点允许(或不允许),您可能会很幸运,但将来可能会发生变化,使您陷入困境(故障功能)。
此外,您计划执行的操作称为网络抓取,通常它不受网站管理员的青睐,因此您最终可能会被阻止或偶然发现内容标记的更改,再次使您处于相同的状态。
我会向该网站的所有者请求许可,也许还需要 API 访问权限。
否则,您的选项 #1 是尝试从浏览器级脚本发出 http 请求(是的,您可以使用 ajax、XmlHttpRequest、新的 fetch API 或第三方脚本),这仅在 CORS 不可用时才有效没问题。
您的选项 #2 是从服务器发出相同的请求(因此,ajax 到您的服务器应用程序,它会抓取远程站点),这将是潜在 CORS 问题的解决方法。同样,CORS 仅在浏览器级别是一个障碍,因为浏览器被编码为拦截它,以最大限度地减少对用户数据的潜在危害。但是,此选项最终会阻止您的服务器访问远程站点,这将由该站点的所有者完成,只需将其配置为不接受来自他们检测为属于您的站点的 IP 地址的连接。很酷吧?
这两个选项都进一步受到处理内容更改的问题的影响,这将在您的请求后脚本手中,无论是在浏览器(选项 1)还是在服务器(选项 2)执行,这可能是持续维护。无论哪种方式,以这样一种方式制作它,以将第 3 方数据视为一个不错的选择(因此,当获取其他数据失败时,不要让您的页面崩溃)。
编辑:我必须尝试确定,但这是需要考虑的事情:您可以在页面中嵌入一个隐藏的 iframe,以该远程网页为目标(如您的示例中所示),然后在 iframe 的内容可用时对其进行解析。请注意,这项努力(我是否拼写正确)根本不是微不足道的,而且会花费相当多的开发时间(而且这不是初学者可以合理完成的任务,至少不会很快完成),并且 -再次 - 我不能 100% 确定它是否有可能,因为 iframe 托管网页在由 3rd 方网站提供服务时可能无法访问 iframe 的内容。所以,这可能是选项#3,它是浏览器解决方案(所以,有很多 javascript),但不容易受到 CORS 阻塞的影响。唷,很多话,我知道——但它们确实有道理,
希望这有助于决定。祝你好运。
推荐阅读
- ocaml - 弃用以 create 开头的函数并将其替换为以 make 开头的函数的原因是什么?
- r - 如何创建一个汇总其他列中出现次数的列
- c# - 如何使用 mvvm light 将字符串从视图传递到 Xamarin 表单中的视图模型
- octave - 八度符号除法表达式与 partfrac 一样,但 N 大小向量中的因子
- linux - 命令行参数如何从 shell 传递到可执行文件?
- java - 同类型的嵌套关系
- reactjs - 如何在反应原生屏幕之间共享状态?
- json - 如何使用 Express 从 Node.js 中的 url 获取 JSON 数据
- c++ - 如何从 C++ 管理 ghci?
- ios - 表格集合视图不坚持 ipad 上的底部布局 xcode