从 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。
这是我第一次处理 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。