从 http 响应中获取信息

Getting information from http response

这是我第一次处理 web-dev 的东西,所以这可能是一个愚蠢的问题。我正在使用 axios 向某个网站发送 http 请求,其中 returns 很多信息。我怎样才能去提取里面的信息?例如,我试图从本页的第一个结果中提取分数 (https://www.ratemyprofessors.com/search.jsp?queryBy=teacherName&queryoption=HEADER&facetSearch=true&query=anne+baranger&schoolName=university+of+california+berkeley&dept=chemistry)。

通过检查 Postman 上的请求,我发现我需要的是 html 页面的脚本元素。我该如何解析这些信息?谢谢

使用 Axios

要在 Axios 中发出 GET 请求,您可以使用:

axios.get('https://domain.tld/path').then(response => {
    if (response.success === 200) {
       const { data } = response;

       // Use `data` here
    }
});

在您的特定情况下,您的获取请求不会访问 JSON API。如果您请求访问 JSON API,那么 data 将是一个常规 JavaScript 对象。

在您的特定情况下,您向网页发送了一个 GET 请求,该网页以一串 HTML 代码作为响应。

你的问题

您正试图从一个没有您想要的数据的网站上抓取数据。当然,当您自己访问该站点时,您会看到数据就在那里。但是一旦页面加载,您就会看到“正在加载...”。这是因为网站对其内部 API 进行了 JavaScript 调用以访问搜索结果。

当您发出 HTTP 请求时,您只会获得发回的数据。没有脚本被导入到您自己的网站,没有 JavaScript 被执行,样式表也没有呈现。您只是被 HTML 字符串困住了。任何未包含在 HTML 字符串中的数据都将超出您的范围。

一个潜在的解决方案

您正在努力的实际上称为网页抓取。 Web 抓取是当您访问网页时,模拟加载期间发生的所有脚本,等待外部页面完成加载,然后开始从该页面收集可见数据。

要抓取网络,您需要编写一个 运行 在服务器上的网络抓取工具。那么您将需要一个 无头浏览器 。流行的无头浏览器是 Puppeteer。另一种选择是硒。

无头浏览器就是 Google Chrome、Safari 或 FireFox,但没有 window。通常你运行你的浏览器在window,但是在你的服务器上,因为一切都是自动化的,所以不需要打开window,但只需要模拟JS/DOM .这将允许脚本 运行、呈现样式表,并加载所有内容(因为这是一个实际的浏览器 运行 站点)。

网页抓取解决方案

如果您以前从未编写过网络抓取工具,可以使用此GitHub repository (JustData)来了解它。

您可以查看数据的实例 JustData scrapes here

在 GitHub 存储库中,导航到 server/src/Scraper